失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > oracle学习笔记(十八) PL/SQL 游标

oracle学习笔记(十八) PL/SQL 游标

时间:2024-02-11 21:22:36

相关推荐

oracle学习笔记(十八)    PL/SQL 游标

游标

说明

查询结果的光标,相当于java中的一个迭代器,方便遍历操作

可使用的属性

%FOUND

SQL语句查询或影响了一行或多行时为 TRUE。如:mycursor%FOUND%NOTFOUND

SQL语句没有影响任何行时为 TRUE。如:mycursor%NOTFOUND%ROWCOUNT

SQL语句查询或影响的行数。如:mycursor%ROWCOUNT%ISOPEN

检查游标是否打开,隐式游标始终为FALSE。如:mycursor%ISOPEN

隐式游标

自动声明,自动打开,自动关闭,名称为SQL

只能处理单行数据

declareemp_t employee%rowtype;beginselect * into emp_t from employee where empno = 7859; if SQL%found thendbms_output.putline()end if;end;/

显式游标

遍历输出

cursor 游标名称[(参数列表)] IS select_statement;--使用游标遍历查询结果并输出declare--给查询结果建立一个游标cursor cv_emp is select * from employee;v_emp employee%rowtype;begin--使用for循环,游标会自动打开,移动和关闭for v_emp in cv_emp loop--这里只输出了员工编号和员工姓名dbms_output.put_line(v_emp.empno||','||v_emp.ename);end loop;end;/

游标使用

声明游标: cursor 游标名称[(参数列表)] IS select_statement;打开游标: open 游标名称[(参数列表)];从游标中提取数据(移动游标)到变量: FETCH 游标名称 INTO 变量列表....;关闭游标: close 游标名称;

游标开始的时候是处于第一行之前,需要移动

--loop循环使用显示游标--输出全部员工的信息declarecursor cv_emp is select empno,ename,job,sal,hiredate from employee;--声明一个可存储游标行的变量rec_emp cv_emp%rowtype;i number := 1;beginopen cv_emp;loop--会使游标向下移动,并将游标所指向的数提取到指定的变量中fetch cv_emp into rec_emp;exit when cv_emp%notfound;--找不到数据就退出循环dbms_output.put_line(i||'. '||rec_emp.empno||', '||rec_emp.ename||', '||rec_emp.job||','||rec_emp.sal||','||rec_emp.hiredate);i := i+1;end loop;close cv_emp;--关闭游标end;/--使用while循环declare--1. 声明游标cursor cv_emp is select empno,ename,job,sal,hiredate from employee;rec_emp cv_emp%rowtype;i number := 1;beginopen cv_emp;--2.打开游标fetch cv_emp into rec_emp;--进入循环前就得移动游标while cv_emp%found loopdbms_output.put_line(i||'. '||rec_emp.empno||', '||rec_emp.ename||', '||rec_emp.job||','||rec_emp.sal||','||rec_emp.hiredate);fetch cv_emp into rec_emp;i := i+1;end loop;close cv_emp;--关闭游标end;/

带参数游标使用

--对所有的"销售员"(SALESMAN)增加佣金500.declarecursor cv_emp(v_job employee.job%type) is select * from employee where job = v_job;v_emp employee%rowtype;beginfor v_emp in cv_emp('SALESMAN') loop--使用主键约束,更新特定行update employee set sal = sal +500 where empno = v_emp.empno;end loop;commit; end;/

游标更新数据

一般更新操作,需要一个条件,来指定需要更新的该条数据,一般使用主键来指定。

如果不想使用主键来指定,还可以使用游标当作指定条件,这就是游标更新行

--对所有的"销售员"(SALESMAN)增加佣金500.--普通方式更新数据declarecursor cv_emp(v_job employee.job%type) is select * from employee where job = v_job;v_emp employee%rowtype;beginfor v_emp in cv_emp('SALESMAN') loop--使用主键约束,更新特定行update employee set sal = sal +500 where empno = v_emp.empno;end loop;commit; end;/--使用游标更新数据declarecursor cv_emp(v_job employee.job%type) is select * from employee where job = v_job for update;v_emp employee%rowtype;beginopen cv_emp('SALESMAN');loopfetch cv_emp into v_emp;--使用游标定位特定行update employee set sal = sal +500 where current of cv_emp;end if;exit when ev_emp%notfound;end loop;commit; close cv_emp;end;/

REF游标

引用游标,动态游标

动态游标

如果觉得《oracle学习笔记(十八) PL/SQL 游标》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。