PL / SQL:ORA-00936:缺少表达式

时间:2016-03-27 19:51:25

标签: oracle object plsql relational-database

我写了这个程序' TT1_ajoute_person_dans_album'将专辑行的OID插入列'专辑'的嵌套表格中在桌子上#personnage'

Create or replace PROCEDURE TT1_ajoute_person_dans_album(pnum IN NUMBER,anum IN NUMBER) IS
BEGIN
INSERT INTO TABLE (SELECT ALBUMS from TT1_PERSONNAGE_TABLE  where NUMP=pnum) 
values (SELECT REF(a) from TT1_ALBUM_TABLE a where a.NUMA=anum);
   COMMIT;
 END TT1_ajoute_person_dans_album;

这些是对象:

Create Type TT1_Album_Type As Object(NumA Number, Titre Varchar(50), Annee_Pub Number, Album_Suiv Varchar(50));

Create Type TT1_Album_NT_Type As Table OF REF TT1_Album_Type ;
Create Type TT1_Personnage_Type As Object(NumP Number, Nom Varchar(40), Prenom Varchar(40), Profession varchar(50), Sexe Varchar(1), Genre Varchar(20), albums TT1_Album_NT_Type);

但是出现了一条消息     ERROR at line 6: PL/SQL: ORA-00936: missing expression

出了什么问题?

1 个答案:

答案 0 :(得分:0)

插入嵌套表的语法是INSERT INTO TABLE( subquery ) VALUES ( values )。但是,子查询的语法为( SELECT nested_table_column FROM table_name WHERE ... ),因此,注意子查询周围的括号,您需要有两组括号。这同样适用于VALUES子句:

Create or replace PROCEDURE TT1_ajoute_person_dans_album(
  pnum IN NUMBER,
  anum IN NUMBER
) IS
BEGIN
  INSERT INTO TABLE(
    ( SELECT ALBUMS FROM TT1_PERSONNAGE_TABLE WHERE NUMP=pnum )
  ) VALUES (
    ( SELECT REF(a) FROM TT1_ALBUM_TABLE a WHERE a.NUMA=anum )
  );
  COMMIT;
END TT1_ajoute_person_dans_album;
/

另外,您确定要在程序中发出COMMIT吗?如果你有多个程序,每个程序都包含提交,一个程序失败,你将无法回滚所有程序。