我写了这个程序' 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
出了什么问题?
答案 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
吗?如果你有多个程序,每个程序都包含提交,一个程序失败,你将无法回滚所有程序。