【问题标题】:Oracle nested tables and column namesOracle 嵌套表和列名
【发布时间】:2009-12-07 18:03:32
【问题描述】:

我想在 Oracle 10g 中执行以下操作(这是一个人为的示例来展示概念,而不是真实的代码)

    create table orders (order_id NUMBER);
    insert into table orders values (1);
    insert into table orders values (2);
    insert into table orders values (3);


TYPE NUMBER_ARRAY_T is TABLE of NUMBER;

PROCEDURE VALIDATE_ORDER_IDS(i_orders IN NUMBER_ARRAY_T, o_output OUT SYS_REFCURSOR)    
IS    
BEGIN
    OPEN o_output FOR
        select ??? from TABLE(i_orders) where ??? NOT IN (select order_id from orders);
END VALIDATE_ORDER_IDS;

将使用包含 (1,2) 的数组调用存储过程,我们希望得到 3 作为结果

所以,问题是,无论如何要指定一个列名,其中 ???是在使用嵌套表作为表时,所以上面的选择语句会起作用吗?

【问题讨论】:

    标签: oracle plsql oracle10g


    【解决方案1】:

    您要查找的关键字是column_value。使用您的设置:

    SQL> CREATE OR REPLACE TYPE NUMBER_ARRAY_T is TABLE of NUMBER;
      2  /
    
    Type created
    SQL> CREATE OR REPLACE PROCEDURE validate_order_ids(i_orders IN number_array_t,
      2                                                 o_output OUT SYS_REFCURSOR)
      3  IS BEGIN
      4      OPEN o_output FOR
      5          SELECT COLUMN_VALUE
      6            FROM TABLE(i_orders)
      7           WHERE COLUMN_VALUE NOT IN (SELECT order_id FROM orders);
      8  END validate_order_ids;
      9  /
    
    Procedure created
    

    要调用该过程,您只需:

    SQL> VARIABLE x REFCURSOR
    SQL> exec validate_order_ids(number_array_t(1,5), :x);
    
    ProcÚdure PL/SQL terminÚe avec succÞs.
    
    SQL> print x
    
    COLUMN_VALUE
    ------------
               5
    

    【讨论】:

    • 完美!谢谢 - 我现在在 using collections 文档中看到了这一点,但它没有完全突出显示,所以我直接阅读了它 - 感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2016-06-04
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多