EDIT : 아래 코드에 맞게 제목을 변경했습니다.Oracle에서 동적 목록에 대한 IN 조건을 확인하려면 어떻게합니까?
나는 오라클 테이블에서 받아 들일 수있는 값의 목록을 검색하고, 다른 필드에 대해 SELECT를 수행하면서 일부 필드를 상기 목록과 비교하려고합니다.
커서로 (아래처럼)이 작업을 시도했지만 실패했습니다.
DECLARE
TYPE gcur IS REF CURSOR;
TYPE list_record IS TABLE OF my_table.my_field%TYPE;
c_GENERIC gcur;
c_LIST list_record;
BEGIN
OPEN c_GENERIC FOR
SELECT my_field FROM my_table
WHERE some_field = some_value;
FETCH c_GENERIC BULK COLLECT INTO c_LIST;
-- try to check against list
SELECT * FROM some_other_table
WHERE some_critical_field IN c_LIST;
END
기본적으로 허용되는 값 목록을 변수에 캐시하는 것은 나중에 반복적으로 검사 할 것이기 때문에 수행해야합니다.
오라클에서 어떻게 수행합니까?
최종 작업이 UPDATE 또는 DELETE 인 경우 코드가 완벽하게 작동합니다. 입력으로 대량 바인딩을 허용하지 않는 SELECT 만 있습니다. – JulesLt
btw, 리소스 누출 - 참조 커서를 닫지 않았습니다. 왜 오래 된 로컬 커서? –