oracle使用对多个变量的引用立即执行

时间:2017-10-06 14:19:27

标签: oracle rest execute-immediate

我正在使用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;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

与您之前的示例相比,这只是一个小小的改动。有关详细信息,请参阅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,因为它们都是第一个变量"object is not iterable".。它会变得更加复杂if you want to repeat variable names ......但我认为这足以回答你的问题。