2015-01-06 57 views
2

我已經寫以下Oracle過程批量來獲取數據和在塊處理它。我正在使用有限的批量收集選項來獲取數據。但是在for循環中,我無法檢索ORD_ID。我試圖輸出使用甲骨文PLSQL BULK收集並For循環

DBMS_OUTPUT.put_line(l_orders(indx)); 

但是,讓編譯錯誤「的論點錯號碼或類型調用‘PUT_LINE’」

create or replace PROCEDURE TESTPROC AS 

CURSOR order_id_cur IS SELECT ORD_ID FROM orders ORDER BY ORD_ID ASC; 
l_order_id VARCHAR2(100); 
TYPE orders_aat IS TABLE OF order_id_cur%ROWTYPE; 
l_orders orders_aat; 
limit_in NUMBER  :=10; 
batch_in NUMBER :=0; 


BEGIN 
    OPEN order_id_cur; 
    LOOP 
    FETCH order_id_cur 
     BULK COLLECT INTO l_orders LIMIT limit_in; 
    DBMS_OUTPUT.put_line('Batch-----'||batch_in); 
    FOR indx IN 1 .. l_orders.COUNT 
    LOOP 
     DBMS_OUTPUT.put_line(indx); 
     DBMS_OUTPUT.put_line(l_orders(indx)); 
    END LOOP; 

    EXIT WHEN l_orders.COUNT < limit_in; 
    batch_in := batch_in+1; 
    END LOOP; 
    CLOSE order_id_cur; 
END TESTPROC; 

如何才能得到裏面的ORD_ID的值ORD_ID for循環。

回答

3

做這樣的 -

DBMS_OUTPUT.put_line(l_orders(indx).ORD_ID);

例如,

SQL> DECLARE 
    2 type t 
    3 IS 
    4 TABLE OF emp%rowtype; 
    5 a t; 
    6 BEGIN 
    7 SELECT * BULK COLLECT INTO a FROM emp; 
    8 FOR i IN 1..a.count 
    9 LOOP 
10  dbms_output.put_line (a(i).ename); 
11 END LOOP; 
12 END; 
13/
SMITH 
ALLEN 
WARD 
JONES 
MARTIN 
BLAKE 
CLARK 
SCOTT 
KING 
TURNER 
ADAMS 
JAMES 
FORD 
MILLER 

PL/SQL procedure successfully completed. 

SQL> 
+1

謝謝你......我以另一種方式嘗試它l_orders.ORD_ID(indx) – Andromeda

+0

不客氣! –

+0

還有一個疑問......是否可以一次獲取所有ORD_ID,而不是使用for循環並遍歷每個循環。基本上我想在'IN'語句中使用所有ord_id ..例如'delete from orders_bckup'(allOrderIds)'ord_id' – Andromeda

0

您還可以直接循環到光標像下面

FOR recc in order_id_cur 
    LOOP 
     DBMS_OUTPUT.put_line(recc.ORD_ID); 
    END LOOP;