2012-12-16 3 views
1

테이블 형식 입력 매개 변수를 사용하는 프로 시저가 있습니다. 이제 SELECT 쿼리의 IN 절에서이 매개 변수를 사용해야합니다.PLSQL 프로 시저의 IN 절에서 테이블 형식 사용

CREATE TYPE ids IS TABLE OF NUMBER; 

CREATE PROCEDURE (emp_ids IN ids) IS 

CURSOR IS (SELECT * FROM EMPLOYEES WHERE EMP_ID IN (SELECT * FROM TABLE(emp_ids)); ..... 

그러나 로컬 컬렉션 형식을 SQL 문에서 사용할 수 없기 때문에이 코드가 작동하지 않습니다.

SELECT 문에서 테이블 유형 매개 변수를 사용하는 다른 방법이 있습니까?

답변

1

게시 한 내용에 따라 로컬 형식이 아닌 스키마 개체로 컬렉션을 선언하고 있습니다. 즉, 사용상의 문제가 없어야합니다. 다음은 예입니다.

-- collection type as schema object 
SQL> create or replace type ids is table of number; 
    2/

Type created 

SQL> create or replace procedure proc1 (emp_ids IN ids) 
    2 IS 
    3  cursor c is (
    4  select first_name 
    5   from employees 
    6  where employee_id in (select column_value 
    7        from table(emp_ids) 
    8        ) 
    9 ); 
10 begin 
11 for i in c 
12 loop 
13  dbms_output.put_line(i.first_name); 
14 end loop; 
15 end; 
16/

Procedure created 

SQL> exec proc1(ids(101, 103, 200)); 

Neena 
Alexander 
Jennifer 

PL/SQL procedure successfully completed 
+0

빠른 응답을 보내 주셔서 감사합니다. 그러나 패키지에서 컬렉션 객체를 선언하고 SELECT 쿼리에서 사용하면 'SQL 문에서 사용할 수없는 로컬 컬렉션 유형'오류가 발생합니다. 패키지 수준에서 사용하는 다른 방법이 있습니까? –

+1

@AbdulMubeen 유감스럽게도 SQL 문에서 pl/sql 형식 (해당 형식이 저장 프로 시저 또는 패키지 본문 \ 사양으로 선언되었는지 여부)을 사용할 수없고 메시지에 매우 명확하게 표시 할 수 없습니다. 그래서 당신의 선택은 SQL 형식을 만드는 것입니다. –

관련 문제