PL/SQL笔记整理

来源:互联网 发布:java 时间选择控件 编辑:程序博客网 时间:2024/06/05 06:55

第一章:ref游标
Ref游标 又称 “动态游标”
(1)、在运行时使不同的语句与之关联
(2)、Ref游标可以使用游标变量
.游标变量
a. 一种引用类型
b. 可以再运行时指向不同的存储位置
c. Close语句关闭游标并释放用于查询的资源
.游标变量的类型
a.具有约束的游标变量
- 也就是具有返回类型的游标变量 也称为”强游标”
b.无约束的游标变量
- 也就是没有返回类型的游标变量 也称为 “弱游标”

declare type Refcur is ref cursor; --声明引用游标类型 游标返回的类型没有限制     varcur Refcur;--游标变量     type rec is record(          sno varchar2(30),          sname varchar2(30)          ); --存储游标查询到得结果     arec rec;     flag int:=0;beginflag :=&flag;if flag=0 thenopen varcur for select hs.student_no,hs.student_name from hand_student hs ;elsif flag=1 thenopen varcur for select ht.teacher_no,ht.teacher_name from hand_teacher ht ;elseopen varcur for select hc.course_no,hc.course_name from hand_course hc;--弱类型游标对目标表没有限制,数据可以使来自任何表end if;/* --for循环不能用于Ref游标,因为它是自动打开游标   for arec in varcur  loop   DBMS_output.put_line('no='||arec.sno ||' name:'||arec.sname);   end loop;*/ loopexit when varcur%notfound;--如果没有查询到数据就退出fetch varcur into arec;DBMS_output.put_line('no='||arec.sno ||' name:'||arec.sname);end loop;close varcur;end;

2、强游标类型

---强型游标declaretype varcur is ref cursor return hand_student_core%rowtype;rec varcur;---游标变量arec hand_student_core%rowtype;---存储游标查询结果flag int:=0;begin flag:=&flag;if flag=0 then    open rec for select * from hand_student_core where core<60;elsif flag=1 then    open rec for select * from hand_student_core where core between 60 and 69 ;elsif flag=2 then    open rec for select * from hand_student_core where core between 70 and 79 ;elsif flag=3 then    open rec for select * from hand_student_core where core between 80 and 100 ;end if;loop    exit when rec%notfound;    fetch rec into  arec;    dbms_output.put_line(arec.student_no||'  '||arec.course_no||' '||arec.core);    end loop;    close rec;end;
原创粉丝点击