2

データを一括でフェッチしてブロック単位で処理するために、次のオラクル手順を作成しました。データをフェッチするために、制限付きの一括収集オプションを使用しています。しかし、for ループ内では ORD_ID を取得できません。を使用してORD_IDを出力しようとしています

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;

for ループ内で ORD_ID の値を取得するにはどうすればよいですか。

4

2 に答える 2

5

このようにしてください -

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>
于 2015-01-06T11:01:23.290 に答える