문제

여기에 기록 된 저장된 절차는 현재 매개 변수를 쿼리에 연결합니다.

   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에서 다음 게시물을 확인하십시오.

Pratty- '커서'에 관한 질문에 감사드립니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top