2016-03-27 99 views
0

我寫這個程序「TT1_ajoute_person_dans_album」插入唱片行的OID列「專輯」的嵌套表在表「personnage」PL/SQL:ORA-00936:缺少表達

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

咦?插入語句真的搞砸了。 https://docs.oracle.com/database/121/SQLRF/statements_9014.htm#SQLRF01604 – OldProgrammer

+0

如果您編輯您的問題幷包含'TT1_PERSONNAGE_TABLE'和'TT1_ALBUM_TABLE'的定義將會很有幫助。謝謝。 –

+0

@OldProgrammer從鏈接的語法部分轉到['insert_into_clause'](https://docs.oracle.com/database/121/SQLRF/statements_9014.htm#i2121694)> ['DML_table_expression_clause'](https:/ /docs.oracle.com/database/121/SQLRF/statements_9014.htm#i2126242)> ['table_collection_expression'](https://docs.oracle.com/database/121/SQLRF/statements_9014.htm#i2121871)和你會在那裏找到語法。 – MT0

回答

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?如果你有多個程序,每個程序包含提交,一個失敗,你將無法回滾所有的程序。