【问题标题】:Oracle, dynamic sql and named parametersOracle、动态 sql 和命名参数
【发布时间】:2011-04-20 13:39:24
【问题描述】:

(我发现这部分回答了这个问题,尽管我的 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 

然后在动态 sql 中使用 :employeeid 而不是依赖位置来访问它们?

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

declare employeeid varchar(15 := :1; 

然后我可以将我的动态 sql 更改为我心中的内容,而不必担心定位。

有没有更好的办法?

谢谢

【问题讨论】:

    标签: oracle dynamic-sql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以在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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        相关资源
        最近更新 更多