Reputation: 264
i have created below type in Oracle
create or replace TYPE "T_STRING_LIST"
AS TABLE OF varchar2(4000)
and using it to collect employee ids.
V_EMP_ID_LIST T_STRING_LIST := T_STRING_LIST();
SELECT employee_id bulk collect
INTO V_EMP_ID_LIST
FROM EMPLOYEE
WHERE DEPT_ID = 101;
Now i want to use this V_EMP_ID_LIST in select statement to select details from another table.
select * from employee_address
where employee_id in (V_EMP_ID_LIST);
Can anyone help how to do it.
Upvotes: 0
Views: 89
Reputation: 167932
Use the MEMBER OF
operator:
DECLARE
V_EMP_ID_LIST T_STRING_LIST;
cur SYS_REFCURSOR;
BEGIN
SELECT employee_id
BULK COLLECT INTO V_EMP_ID_LIST
FROM EMPLOYEE
WHERE DEPT_ID = 101;
OPEN cur FOR
select *
from employee_address
where employee_id MEMBER OF V_EMP_ID_LIST;
END;
/
or a table collection expression:
DECLARE
V_EMP_ID_LIST T_STRING_LIST;
cur SYS_REFCURSOR;
BEGIN
SELECT employee_id
BULK COLLECT INTO V_EMP_ID_LIST
FROM EMPLOYEE
WHERE DEPT_ID = 101;
OPEN cur FOR
select *
from employee_address
where employee_id IN ( SELECT COLUMN_VALUE FROM TABLE( V_EMP_ID_LIST ) );
END;
/
Upvotes: 1