0

一个简单的动态 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 语句)

实际的语法应该是什么样的?

4

2 回答 2

1

您只需要更改此部分以使其成为 PL/SQL 而不是 SQL:

sql_stmt := 'begin PKG_COLLECTION.COLLECTION_INS_01(:1,:2,:3,:4,:5,:6); end;';
于 2013-04-25T14:09:29.010 回答
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它实现了同样的事情,但更干净,如果签名发生变化,则会导致无效的过程/包/函数。

于 2013-04-25T14:52:23.327 回答