2017-10-06 7 views
0

私はOracle Rest Data Servicesを使用してアプリケーションを構築しています。oracle複数の変数への参照を使用して即時実行

私は簡単にクエリパラメータがリクエストボディからバインドされたクエリINSERT INTO bar (first, second) VALUES (:first, :second)

を実行し、クエリSELECT * FROM barまたは

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

を実行します。このGET http://example.com/foo/barようなもので&書き込みを読むことができます。

ここでは、動的クエリを実行するルートを構築したいと考えています。

私は、1つのバインディングの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 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 ...しかし、私はあなたの質問に答えるために十分だと思う。

関連する問題