1
2
3
4
5
6
7
8
9
10
11
12
13
14
declare
   cursor  user_cur
   is  select 
   from  my_user;
   user_row my_user%rowtype;
   begin
       open  user_cur;
       loop
       fetch  user_cur  into  user_row;
       exit  when  user_cur%notfound;
       dbms_output.put_line(user_row.user_id|| '----' ||user_row. name );
       end  loop;
       close  user_cur;
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
declare
   cursor  user_cur
   is  select 
   from  my_user;
   row_user my_user%rowtype;
   begin
       open  user_cur;
       loop
         fetch  user_cur  into  row_user;
         exit  when  user_cur%notfound;
         dbms_output.put_line(row_user.user_id|| '----' ||row_user. name || '----' ||row_user.age);
       end  loop;
       close  user_cur;
end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
declare
   cursor  row_user
   is  select 
   from  my_user;
   type my_user_tab  is  table  of  my_user%rowtype;
    /*
    定义和表my_user行对象一致的集合类型cur_row_user,
   用于存放批量得到的数据
   */
   cur_row_user my_user_tab;   
   
   begin
       open  row_user;
       loop
         /*从结果集中提取数据,每次提取两行*/
         fetch  row_user bulk collect  into  cur_row_user limit 2;
         /*遍历集合cur_row_user中的数据*/
         for  in  1..cur_row_user. count  loop
             dbms_output.put_line(cur_row_user(i).user_id|| '----' ||cur_row_user(i). name || '----' ||cur_row_user(i).age);
         end  loop;
         exit  when  row_user%notfound;
        
       end  loop;
       close  row_user;
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
declare
   cursor  user_cur
   is  select 
   from  my_user;
   type my_user_tab  is  table  of  my_user%rowtype;
    /*
    定义和表my_user行对象一致的集合类型cur_user_cur,
   用于存放批量得到的数据
   */
   cur_user_cur my_user_tab;   
   
   begin
       open  user_cur;
       loop
         /*从结果集中提取数据,每次提取两行*/
         fetch  user_cur bulk collect  into  cur_user_cur limit 2;
         /*遍历集合cur_user_cur中的数据*/
         for  in  1..cur_user_cur. count  loop
             dbms_output.put_line(cur_user_cur(i).user_id|| '----' ||cur_user_cur(i). name || '----' ||cur_user_cur(i).age);
         end  loop;
         exit  when  user_cur%notfound;
        
       end  loop;
       close  user_cur;
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
declare
   cursor  user_cur
   is  select 
   from  my_user;
   begin
      
         for  cdr  in  user_cur
           loop
             dbms_output.put_line(cdr.user_id|| '----' ||cdr. name || '----' ||cdr.age);
           end  loop;
   end ;
   /* cursor  for  loop 不需要特别的申明变量,它可以提取出行对象类型数据*/
1
2
3
4
5
6
7
8
9
10
11
12
declare
   cursor  user_cur
   is  select 
   from  my_user;
   cdr my_user%rowtype;
   begin
        if user_cur%isopen  then
          fetch  user_cur  into  cdr;
          dbms_output.put_line(cdr.user_id|| '----' ||cdr. name || '----' ||cdr.age);
        else  dbms_output.put_line( '游标没有打开' );
        end  if;
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
declare
   cursor  user_cur
   is  select 
   from  my_user;
   cdr my_user%rowtype;
   begin
     open  user_cur;
        if user_cur%isopen  then
          loop
            fetch  user_cur  into  cdr;
            exit  when  user_cur%notfound;
            dbms_output.put_line(cdr.user_id|| '----' ||cdr. name || '----' ||cdr.age);
           end  loop;  
      else  dbms_output.put_line( '游标没有打开' );
        end  if;
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare
   cursor  user_cur
   is  select 
   from  my_user;
   cdr my_user%rowtype;
   begin
     open  user_cur;
      loop
        fetch  user_cur  into  cdr;
              if user_cur%found  then
                 dbms_output.put_line(cdr.user_id|| '----' ||cdr. name || '----' ||cdr.age);
              else 
                dbms_output.put_line( '游标没有打开' );
                exit;
              end  if;
      end  loop;  
   end ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
declare
   /*这里的取值写在 declare begin 中都可以*/
   v_user_id my_user.user_id%type:= '&v_user_id' ;
   /*这里的v_user_id的类型写number和my_user.user_id%type都可以*/
   cursor  c_my_user(v_user_id my_user.user_id%type)
   is  select 
   from  my_user
   where  user_id=v_user_id;
   cdr my_user%rowtype;
   
   begin
    
     open  c_my_user(v_user_id);
      loop
        fetch  c_my_user  into  cdr;
              if c_my_user%found  then
                 dbms_output.put_line(cdr.user_id|| '----' ||cdr. name || '----' ||cdr.age);
              else 
                dbms_output.put_line( '游标没有打开' );
                exit;
              end  if;
      end  loop;  
   end ;

 本文转自 matengbing 51CTO博客,原文链接:http://blog.51cto.com/matengbing/2044941