(我发现这部分回答了这个问题,虽然我的sql将在oracle和mssql中使用,但声明方式看起来更整洁:) Binding variables in dynamic PL/SQL
我有一些动态sql,我正在使用如下语法执行:
EXECUTE IMMEDIATE plsql_block USING employeeid, sortname;
然后我可以使用:1,:2等访问动态sql中的那些变量。 我可以使用命名参数吗?
之类的东西EXECUTE IMMEDIATE plsql_block USING employeeid => employeeid
然后使用:employeeid在动态sql中访问它们而不是依赖于位置?
如果不是我的想法是在sql的开头做这样的事情:
declare employeeid varchar(15 := :1;
然后我可以将动态sql更改为我的内容,而不必担心定位。
有更好的方法吗?
感谢
答案 0 :(得分:3)
您的解决方法是我过去使用过的 还有一个很好的旧DBMS_Sql,它允许绑定变量,就像你可以通过OCI一样。 (这基本上就是DBMS_Sql似乎正在做的事情;-))
答案 1 :(得分: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;