bulk collect

来源:互联网 发布:实施seo的效果 编辑:程序博客网 时间:2024/05/16 10:40
SQL> set serverout on
SQL> 
SQL> Declare
  2    Cursor Csr Is Select Level From dual Connect By Level<=12;
  3    Type T_Csr Is Table Of Varchar2(10);
  4    v_Csr T_Csr;
  5    i Number:=0;
  6    j Number;
  7  Begin
  8    Open Csr;
  9    Loop
 10      Fetch Csr Bulk Collect Into v_Csr;
 11      Exit When v_Csr.Count=0;
 12      i:=i+1;
 13      dbms_output.put_line('第 '||i||' 次取数');
 14  
 15      For j In v_Csr.first..v_Csr.Last Loop
 16          dbms_output.put_line(j);
 17      End Loop;
 18    End Loop;
 19  End;
 20  /
第 1 次取数
1
2
3
4
5
6
7
8
9
10
11
12
PL/SQL procedure successfully completed


SQL> 
SQL> Declare
  2    Cursor Csr Is Select Level From dual Connect By Level<=12;
  3    Type T_Csr Is Table Of Varchar2(10);
  4    v_Csr T_Csr;
  5    i Number:=0;
  6    j Number;
  7  Begin
  8    Open Csr;
  9    Loop
 10      Fetch Csr Bulk Collect Into v_Csr Limit 5;
 11      Exit When v_Csr.Count=0;
 12      i:=i+1;
 13      dbms_output.put_line('第 '||i||' 次取数');
 14  
 15      For j In v_Csr.first..v_Csr.Last Loop
 16          dbms_output.put_line(j);
 17      End Loop;
 18    End Loop;
 19  End;
 20  /
第 1 次取数
1
2
3
4
5
第 2 次取数
1
2
3
4
5
第 3 次取数
1
2
PL/SQL procedure successfully completed


SQL> 
SQL> Declare
  2    Cursor Csr Is Select Level From dual Connect By Level<=12;
  3    Type T_Csr Is Varray(5) Of Varchar2(10);
  4    v_Csr T_Csr;
  5    i Number:=0;
  6    j Number;
  7  Begin
  8    Open Csr;
  9    Loop
 10      Fetch Csr Bulk Collect Into v_Csr;
 11      Exit When v_Csr.Count=0;
 12      i:=i+1;
 13      dbms_output.put_line('第 '||i||' 次取数');
 14  
 15      For j In v_Csr.first..v_Csr.Last Loop
 16          dbms_output.put_line(j);
 17      End Loop;
 18    End Loop;
 19  End;
 20  /
Declare
  Cursor Csr Is Select Level From dual Connect By Level<=12;
  Type T_Csr Is Varray(5) Of Varchar2(10);
  v_Csr T_Csr;
  i Number:=0;
  j Number;
Begin
  Open Csr;
  Loop
    Fetch Csr Bulk Collect Into v_Csr;
    Exit When v_Csr.Count=0;
    i:=i+1;
    dbms_output.put_line('第 '||i||' 次取数');


    For j In v_Csr.first..v_Csr.Last Loop
        dbms_output.put_line(j);
    End Loop;
  End Loop;
End;
ORA-22165: 指定的索引 [6] 必须介于 [1] 到 [5] 之间
ORA-06512: 在 line 10


SQL> 
SQL> Declare
  2    Cursor Csr Is Select Level From dual Connect By Level<=12;
  3    Type T_Csr Is Varray(5) Of Varchar2(10);
  4    v_Csr T_Csr;
  5    i Number:=0;
  6    j Number;
  7  Begin
  8    Open Csr;
  9    Loop
 10      Fetch Csr Bulk Collect Into v_Csr Limit 3;
 11      Exit When v_Csr.Count=0;
 12      i:=i+1;
 13      dbms_output.put_line('第 '||i||' 次取数');
 14  
 15      For j In v_Csr.first..v_Csr.Last Loop
 16          dbms_output.put_line(j);
 17      End Loop;
 18    End Loop;
 19  End;
 20  /
第 1 次取数
1
2
3
第 2 次取数
1
2
3
第 3 次取数
1
2
3
第 4 次取数
1
2
3

PL/SQL procedure successfully completed


SQL> Declare
  2    Type T_Csr Is Table Of Varchar2(10);
  3    v_Csr T_Csr;
  4  Begin
  5    Select Level Bulk Collect Into v_Csr From dual Connect By Level<=3;
  6    For j In v_Csr.first..v_Csr.Last Loop
  7          dbms_output.put_line(j);
  8    End Loop;
  9  End;
 10  /
1
2
3
PL/SQL procedure successfully completed

0 0