2017-10-06 2 views
0

Oracle Rest Data Services를 사용하여 앱을 구축하고 있습니다.오라클은 여러 변수에 대한 참조를 사용하여 즉시 실행합니다.

내가 쉽게 쿼리 SELECT * FROM bar 또는 쿼리를 실행

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

실행이 GET http://example.com/foo/bar 같은 뭔가 & 쓰기를 읽을 수 INSERT INTO bar (first, second) VALUES (:first, :second) 쿼리 매개 변수가 요청 본문에서 바인딩

.

이제 동적 쿼리를 실행하는 경로를 만들고 싶습니다.

내가 할 수있는 한 바인딩 PARAM으로, 예를 들면 : 쿼리

BEGIN EXECUTE IMMEDIATE :query USING :param; END;

하지만 여러 PARAMS와 함께 할 방법을 모르는를 실행

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

. 예를 들면.

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의 값은 모두 첫 번째 사람이야 때문에 변수 a 결박 SQL로 지정됩니다. 그것은 더 복잡해 질 수 있습니다 if you want to repeat variable names ...하지만 당신의 질문에 대답하는 것만으로도 충분하다고 생각합니다.