2013-04-25 41 views
0

语法麻烦与简单的dyanamic pl/sql插入语句。我的代码如下。动态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语句)

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

回答

1

你只需要改变这一部分,使之成为PL/SQL,而不是SQL的:

sql_stmt := 'begin PKG_COLLECTION.COLLECTION_INS_01(:1,:2,:3,:4,:5,:6); end;'; 
0

由于执行的语句不是动态的,我强烈建议你不要使用执行即时。相反,我会去用一个简单的

PKG_COLLECTION.COLLECTION_INS_01(V_P1,V_P2,V_P3,V_P4,V_P5,V_P6); 

其实现同样的事情,但更清洁,会导致一个无效的程序/包/功能如果PKG_COLLECTION.COLLECTION_INS_01变化的签名。