2012-12-16 98 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類型。 –

相關問題