Oracle,动态sql和命名参数

时间:2011-04-20 13:39:25

标签: oracle dynamic-sql

(我发现这部分回答了这个问题,虽然我的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更改为我的内容,而不必担心定位。

有更好的方法吗?

感谢

2 个答案:

答案 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;