2009-12-07 58 views
3

我想要做在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回來作爲結果

所以,問題是,是否有指定列名稱?在使用嵌套表作爲表時,所以上面的select語句可以工作嗎?

回答

4

您正在尋找的關鍵字是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 
+0

完美!謝謝 - 我現在在使用集合文檔中看到了這一點,但它並未完全突出顯示,所以我正確地閱讀它 - 感謝您的幫助。 – wadesworld 2009-12-07 18:26:49