-- 声明游标;CURSOR cursor_name IS select_statement--For 循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用for循环来使用这个游标
declare
       --类型定义
       cursor c_job
       is
       select empno,ename,job,sal
       from emp
       where job='MANAGER';
       --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
       c_row c_job%rowtype;
begin
       for c_row in c_job loop
         dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
       end loop;
end;
      
--Fetch游标
--使用的时候必须要明确的打开和关闭declare 
       --类型定义
       cursor c_job
       is
       select empno,ename,job,sal
       from emp
       where job='MANAGER';
       --定义一个游标变量
       c_row c_job%rowtype;
begin
       open c_job;
         loop
           --提取一行数据到c_row
           fetch c_job into c_row;
           --判读是否提取到值,没取到值就退出
           --取到值c_job%notfound 是false 
           --取不到值c_job%notfound 是true
           exit when c_job%notfound;
            dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
         end loop;
       --关闭游标
      close c_job;
end;

解决方案 »

  1.   


    游标在数据库中的作用是什么?什么时候会用到游标呢?
     c_row c_job%rowtype;
    这句话是定义一个游标变量吧, c_row  是什么?c_job看上面是游标吧 %rowtype又是什么? 在java中 定义一个变量 是int 数据类型  a 变量名 然后初始化  游标 是怎么定义变量的
      

  2.   

    游标你可以理解为一个数据集。跟java的list差不多。把一组数据放入游标中:
      cursor curr_list is
        select TSK_CD_ID, MDL_BUKT_ID, CTLG_BUKT_ID, expndtr_ctgry_id, tran_id,MGMT_ENTY_ID
          from cnfm.cnfm_tran_ln_dtl
         where MGMT_ENTY_ID in
               (select MGMT_ENTY_ID
                  from cnfm.cnfm_mgmt_enty
                 where model_id = model_id
                   and Gl_Qtr_Desc in (qtr_desc));
      

  3.   


    需要对批量数据单独处理,
    实际写sql应该尽量避免使用,
    效率比批量处理的sql低
      

  4.   


    游标在数据库中的作用是什么?什么时候会用到游标呢?
     c_row c_job%rowtype;
    这句话是定义一个游标变量吧, c_row  是什么?c_job看上面是游标吧 %rowtype又是什么? 在java中 定义一个变量 是int 数据类型  a 变量名 然后初始化  游标 是怎么定义变量的
    游标的作用是返回结果集数据。当需要返回结果集数据的时候需要使用游标。
    c_row 是c_job游标的变量。%rowtype是对这个变量行进行的定义,意思是返回行的数据类型与emp
    表里面的数据类型一致,当emp表里面数据类型改变后,该游标里面的数据类型也跟着改变。
      

  5.   

    我也是刚开始接触游标,下面的例子是可以的,我验证过了,让我们一起来学习吧!
    还有好多种,这里就没有贴出来了。
    游标使用一:
    declare
    cursor mycur is --声明游标
    select * from a;
    myrec a%rowtype; --声明与表字段相同的记录
    begin
    open mycur;--打开游标
    fetch mycur into myrec;
    while mycur%found loop
    dbms_output.put_line(myrec.col1||':'||myrec.col2);
    fetch mycur into myrec;
    end loop;
    close mycur;
    end;
    /
    游标使用二: 使用参数
    declare
    cursor mycur(id varchar) is
    select col2 from a where col1=id;
    myrec a.col2%type; 
    begin
    open mycur('1');
    loop
    fetch mycur into myrec;
    exit when mycur%notfound;
    dbms_output.put_line(myrec);
    end loop;
    close mycur;
    end;
    /