Oracle中如何使用游标?哪位高人能给我举一个简单的例子!多谢了!!

解决方案 »

  1.   

    假设表结构如:
    table1(id varchar2(10), name varchar2(10))id  name
    1   aa
    1   bb
    1   cc
    2   xx
    3   yy
    3   zz--示例程序如下
    declare 
      i integer;
      v_tmp varchar2(20);
      cusor kk is --定义游标变量
         select id,name from table1;
    begin 
      for v in kk loop
        v_tmp:=to_char(v.id)||'==='||v.name;
        dbms_output.put_line(v_tmp);
      end loop;
    end;
      
      

  2.   

    多谢楼上,下面的这个写法应该和上面差不多吧。declare
    cd varchar2(7);
    nm varchar2(40);
    cursor c_s is 
        select location_cd,location_nm from location;
    begin
    open c_s;
    loop
    fetch c_s into cd,nm;
    exit when c_s%NOTFOUND;
    dbms_output.put_line(cd||'----'||nm);
    end loop;
    close c_s;
    end;
      

  3.   

    游标的作用 
    当PL/SQL游标查询返回多行数据时,这些记录组被称为活动集。Oracle将这种活动集存储在您创建的显示定义的已命名的游标中。Oracle游标是一种用于轻松的处理多行数据的机制,没有游标,Oracle开发人员必须单独地、显式地取回并管理游标查询选择的每一条记录。 
    游标的另一项功能事,它包含一个跟踪当前访问的记录的指针,这使您的程序能够一次处理多条记录。 
    什么情况
    当一个sql无法提取记录或者记录需要单条处理的时候,就用游标
      

  4.   

    游标的写法和存储过程差不多,只要知道基本语法,
    剩下的就是编成的工作了。
    参考以下代码,可能会有些帮助。
    declare 
     num varchar2(10);
      cur sys_refcursor; 
    begin 
      for rec in (select   table_name,column_name  
                 from   user_tab_columns       
                    where   column_name='LOCATION_CD') 
    loop
      open cur for 'select count(*) from '|| rec.table_name ||' where '|| rec.column_name||'=''D059010'''; 
    --dbms_output.put_line('select count(*) from '|| rec.table_name ||' where '|| rec.column_name||'=''D059010'''); 
    --dbms_output.put_line(to_char(cur%rowcount)); 
    fetch cur into  num;
    dbms_output.put_line(rec.table_name||'   '||num);  
    insert into tmp_test values(rec.table_name,num);
    close cur;
    end loop;
    end;