一个简单的动态pl/sql插入语句的语法问题。我的代码如下。
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语句)
实际的语法应该是什么样子的?
发布于 2013-04-25 22:09:29
您只需将此部分更改为PL/SQL,而不是SQL:
sql_stmt := 'begin PKG_COLLECTION.COLLECTION_INS_01(:1,:2,:3,:4,:5,:6); end;';发布于 2013-04-25 22:52:23
由于执行的语句不是动态的,我强烈建议您不要使用execute immediate。取而代之的是,我会使用简单的
PKG_COLLECTION.COLLECTION_INS_01(V_P1,V_P2,V_P3,V_P4,V_P5,V_P6);它实现了相同的功能,但更简洁,如果PKG_COLLECTION.COLLECTION_INS_01的签名发生更改,则会导致无效的过程/包/函数。
https://stackoverflow.com/questions/16216938
复制相似问题