sql_stmt VARCHAR2(500);
sql_stmt := 'PKG_COLLECTION.COLLECTION_INS_01(:1,:2,:3,:4,:5,:6)';
execute immediate sql_stmt using
IN OUT V_P1,
IN OUT V_P2,
IN OUT V_P3,
IN OUT V_P4,
IN OUT V_P5,
IN OUT V_P6;
(错误:ORA-00900:无效的SQL语句)
实际语法应该是什么样的?
答案 0 :(得分:1)
您只需要更改此部分以使其成为PL / SQL而不是SQL:
sql_stmt := 'begin PKG_COLLECTION.COLLECTION_INS_01(:1,:2,:3,:4,:5,:6); end;';
答案 1 :(得分:0)
由于执行的语句不是动态的,我强烈建议您不要使用 execute immediate 。相反,我会选择一个简单的
PKG_COLLECTION.COLLECTION_INS_01(V_P1,V_P2,V_P3,V_P4,V_P5,V_P6);
实现了同样的目的,但是如果PKG_COLLECTION.COLLECTION_INS_01
的签名发生变化,则更清晰并导致无效的过程/包/函数。