2011-04-20 25 views
3

(我发现这里面部分回答了这个问题,虽然给出的申报方式看起来更加整洁,我的SQL是在将Oracle和MSSQL :) Binding variables in dynamic PL/SQL甲骨文,动态SQL和命名参数

我使用有我正在使用的语法像下面执行一些动态SQL:

EXECUTE IMMEDIATE plsql_block USING employeeid, sortname; 

,然后我可以访问使用动态SQL中的变量:1:2等 我可以使用命名参数呢?像

EXECUTE IMMEDIATE plsql_block USING employeeid => employeeid 

然后访问它们里面的动态sql使用:employeeid而不是依靠位置?

如果不是我的想法是在SQL的开始做这样的事情:

declare employeeid varchar(15 := :1; 

,然后我可以改变我的动态SQL我内心的内容,而不必担心定位。

有没有更好的方法?

谢谢

回答

3

您的解决方法是我以前使用过的。
还有很好的旧DBMS_Sql,它允许像你一样可以通过OCI绑定变量。 (这基本上是什么DBMS_SQL似乎反正做;-))

3

可以使用指定的参数在DBMS_SQL

DECLARE 
     res INT; 
     cr INT; 
BEGIN 
     cr := DBMS_SQL.OPEN_CURSOR; 
     DBMS_SQL.PARSE(cr, :plsql_block, DBMS_SQL.NATIVE); 
     DBMS_SQL.BIND_VARIABLE(cr, ':employee', :employee); 
     res := DBMS_SQL.EXECUTE(cr); 
     DBMS_SQL.CLOSE_CURSOR(cr); 
END;