预言机使用对多个变量的引用立即执行



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

知道吗?

与之前的示例相比,这只是一个小变化。有关详细信息,请参阅文档中的此示例。

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因为它们都是第一个。如果您想重复变量名称,它可能会变得更加复杂......但我认为这足以回答你的问题。

相关内容

  • 没有找到相关文章

最新更新