【问题标题】:How to use table type in oracle select statementoracle select语句中如何使用表类型
【发布时间】:2018-10-11 14:45:03
【问题描述】:

我在 Oracle 中创建了以下类型

create or replace TYPE "T_STRING_LIST" 
AS TABLE OF varchar2(4000)

并使用它来收集员工 ID。

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;

现在我想在 select 语句中使用这个 V_EMP_ID_LIST 从另一个表中选择详细信息。

select * from employee_address
where employee_id in (V_EMP_ID_LIST);

任何人都可以帮助如何做到这一点。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    使用MEMBER OF 运算符:

    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;
    /
    

    或表集合表达式:

    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;
    /
    

    【讨论】:

    • 其中employee_id IN (SELECT COLUMN_VALUE FROM TABLE(V_EMP_ID_LIST));为我工作。谢谢!
    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多