`

Oracle中的游标

阅读更多
静态游标:与一个sql语句关联,编译块时候,语句已知
动态游标:运行时候与不同的sql关联

游标变量:
       类似于pl/sql变量,可以在运行时接纳不同的值.
定义游标变量的完整语法:       
        1.具有返回类型的,称为有约束的游标或者强游标
             type type_name is ref cursor return return_type;
        2.没有返回类型的,称为无约束的游标或者弱游标
             type type_name is ref cursor ;
        3.返回值为记录类型
弱游标:
--------------------------------------------------------------------------------
   declare
        type ref_cur is ref cursor;
        v_cur ref_cur;
        ab varchar2(10);
        vals varchar2(20);
   begin
        ab:='&input_choice';
        if upper(ab)='A' then
             open v_cur for select ename
                                                from emp
                                                where empno=7369;
             fetch v_cur into vals;
             dbms_output.put_line('姓名:'||vals);
             close v_cur;
       else
             open v_cur for select dname
                                                from dept
                                                where deptno=10;
             fetch v_cur into vals;
             dbms_output.put_line('部门名称:'||vals);
             close v_cur;
end if;
end;
/
--------------------------------------------------------------------------
强游标:用记录集
    declare
          type recordtype is record(
                  r_deptno number(2),
                  r_dname varchar2(14),
                  r_loc        varchar2(13)
                                                   );
           type rt_cur is ref cursor return dept%rowtype;
           vrt_cur rt_cur;
           value_rt   recordtype ;
     begin
           open vrt_cur for select deptno,dname,loc
                                                from dept;
            loop
                   fetch vrt_cur into value_rt ;
                   exit when vrt_cur%notfound;
                   dbms_output.put_line('编号 '||value_rt.r_deptno||' 部门 '||value_rt.r_dname );
            end loop;
            close vrt_cur ;
      end;
----------------------------------------------------------------------------
强游标:用表
declare        
        type rt_cur is ref cursor return dept%rowtype;
           vrt_cur rt_cur;
           value_rt   dept%rowtype;
     begin
           open vrt_cur for select deptno,dname,loc
                                                from dept;
            loop
                   fetch vrt_cur into value_rt ;
                   exit when vrt_cur%notfound;
                   dbms_output.put_line('编号 '||value_rt.deptno||' 部门 '||value_rt.dname );
            end loop;
            close vrt_cur ;
      end;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics