PL SQL 내부의 쿼리를 매개 변수화 할 수 있습니까?
-
19-08-2019 - |
문제
여기에 기록 된 저장된 절차는 현재 매개 변수를 쿼리에 연결합니다.
SELECT *
FROM Names
WHERE Name = ' || prmName || '
ORDER BY ' || prmSortField
저장된 절차 내 에서이 쿼리를 매개 변수화 할 수 있습니까? 아마도 :
query = 'select * From Names Where Name = @name Order By ' || prmSortField
call(query, prmName)
메모:
왜 그렇게하는지 궁금해하는 경우 SP에 대한 두 가지 공통 매개 변수가 있습니다. sortFieldIndex
그리고 sortDirection
. 이를 직접 매개 변수화 할 수 없으므로 쿼리가 동적으로 생성됩니다. 그러나 다른 매개 변수는 주입을 위해 쿼리를 열어줍니다. 따라서 일부 매개 변수를 매개 변수화하는 방법을 찾고 있습니다.
해결책
전적으로. 사용 커서.
DECLARE
CURSOR c1 (job VARCHAR2, max_wage NUMBER) IS
SELECT * FROM employees WHERE job_id = job AND salary > max_wage;
BEGIN
FOR person IN c1('CLERK', 3000)
LOOP
-- process data record
DBMS_OUTPUT.PUT_LINE('Name = ' || person.last_name || ', salary = ' ||
person.salary || ', Job Id = ' || person.job_id );
END LOOP;
END;
다른 팁
바인드 값이있는 동적 쿼리의 경우 다음을 수행하십시오.
procedure p (prmName varchar2, prmSortField varchar2)
is
query varchar2(100);
rc sys_refcursor;
names_rec names%rowtype;
begin
query = 'select * From Names Where Name = :name Order By ' || prmSortField
open rc for query using prmName;
loop
fetch rc into names_rec;
exit when rc%notfound;
-- process this row
end loop;
close rc;
end;
옵션 매개 변수 값을 지원하는보다 정교한 절차 (그러나 SYS 컨텍스트를 사용)는 asktom.com에서 다음 게시물을 확인하십시오.
제휴하지 않습니다 StackOverflow