2017-10-06 121 views
0

我正在使用Oracle Rest Data Services构建应用程序。oracle使用多个变量的引用立即执行

我可以轻松地阅读&写的是这样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)

在哪里查询参数从请求体的约束。

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

我可以做到这一点,一个结合PARAM,例如:

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

运行查询

BEGIN EXECUTE IMMEDIATE :query USING :param; END;

但我不知道如何与多个PARAMS做。例如。

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;

任何想法?

回答

0

这与以前的例子只有一点点不同。有关更多信息,请参阅this example from the docs

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

为戒,在查询绑定变量名不需要匹配在EXECUTE紧接块的名字 - 他们在它们发生的顺序正在评估,叫不上名字。因此,在这个例子:

: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 ...但我认为这足以回答你的问题。