【问题标题】:oracle execute immediate using reference to multiple variablesoracle 使用多个变量的引用立即执行
【发布时间】:2017-10-06 14:19:26
【问题描述】:

我正在使用 Oracle Rest Data Services 构建应用程序。

我可以使用类似GET http://example.com/foo/bar 运行查询SELECT * FROM bar 或

POST http://example.com/foo/bar { "first": "a'b", "second": "c,d" }

运行查询INSERT INTO bar (first, second) VALUES (:first, :second)

查询参数从请求正文绑定。

现在,我想构建一个运行动态查询的路由。

我可以用一个绑定参数来做到这一点,例如:

POST http://example.com/foo/query { "query": "DELETE FROM bar WHERE first = :param", "param": "a'b" }

运行查询

BEGIN EXECUTE IMMEDIATE :query USING :param; END;

但我不知道如何使用多个参数来做到这一点。例如。

POST http://example.com/foo/query { "query": "DELETE FROM bar WHERE first = :first AND second = :second", "bindings": "first,second", "first": "a'b", "second": "c,d" }

查询应该是这样的

DECLARE params ...? -- (params variable should set USING list from :bindings request param) BEGIN EXECUTE IMMEDIATE :query USING params; END;

有什么想法吗?

【问题讨论】:

    标签: oracle rest execute-immediate


    【解决方案1】:

    与您之前的示例相比,这只是一个很小的变化。请参阅this example from the docs 了解更多信息。

    BEGIN EXECUTE IMMEDIATE :query USING :first, :second; END;
    

    作为警告,查询中的绑定变量名称不需要与 EXECUTE IMMEDIATE 块中的名称匹配 - 它们是按照它们出现的顺序而不是名称来计算的。所以在这个例子中:

    :query := 'DELETE FROM bar WHERE first = :a and second = :b';
    execute immediate :query using :my_var1, :my_var2;
    

    pl/sql 变量my_var1 的值分配给sql 绑定变量a,因为它们都是第一个。它可能会变得更复杂if you want to repeat variable names...但我认为这足以回答你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多