0

カーソルを使用してフィールドの最初の 100 個の値を出力しようとしていますが、ここで ORA-06550 エラーが発生します。

Declare 
  BG_TOTAL number;

  cursor c1 is 
    select BG_ID 
      from <tablename>;

  Type BG_TAB_TYPE is table of  c1%ROWTYPE;

  BG_LIST BG_TAB_TYPE;

Begin
  open c1;
  FETCH c1 BULK COLLECT INTO BG_LIST;

  close c1;

   for i in 1..c1.count    
   loop
     DBMS_OUTPUT.PUT_LINE(c1(i).BG_ID);
   End loop;  
end;
4

2 に答える 2

1

さらに別のオプションはbulk collectlimit.

これにより、コンテンツ、制限、および処理がうまく分離されます。あなたの場合、分離は問題にならないかもしれませんが、これは時々便利だと思います(テストしやすいモジュラーコードを書くのに役立ちます)。

declare
  -- data content
  cursor tables_c is select * from all_tables;
  type table_list_t is table of tables_c%rowtype;

  v_table_list table_list_t;
begin
  open tables_c;

  -- limiting the data set
  fetch tables_c bulk collect into v_table_list limit 8;

  -- processing
  for i in 1 .. v_table_list.count loop
    dbms_output.put_line(v_table_list(i).table_name);
  end loop;

  close tables_c;
end;
/
于 2013-11-07T07:25:08.690 に答える
0

カーソルではなく、レコードを一括収集したネストしたテーブルをループする必要があります。これは修正されたコードです:

Declare 
  BG_TOTAL number;

  cursor c1 is 
    select BG_ID 
      from my_Tab524;

  Type BG_TAB_TYPE is table of  c1%ROWTYPE;

  BG_LIST BG_TAB_TYPE;

Begin
  open c1;
  FETCH c1 BULK COLLECT INTO BG_LIST;

  close c1;

   for i in 1..BG_LIST.count    
   loop
     DBMS_OUTPUT.PUT_LINE(BG_LIST(i).BG_ID);
     EXIT WHEN i = 10;
   End loop;  
end;
于 2013-11-07T02:17:39.037 に答える