PL/SQL程序之光标
来源:互联网 发布:金属中性笔 知乎 编辑:程序博客网 时间:2024/06/06 04:07
1、说明光标语法:CURSOR 光标名 [ (参数名 数据类型[,参数名 数据类型]...)] IS SELECT 语句;2、用于存储一个查询返回的多行数据3、打开光标: open c1; (打开光标执行查询)4、取一行光标的值:fetch c1 into pjob; (取一行到变量中)5、关闭光标: close c1;(关闭游标释放资源)6、注意: 上面的pjob必须与emp表中的job列类型一致: 定义:pjob emp.job%type;例一:按职工的职称长工资,总裁1000元,经理800元,其他人员长400元Java程序SQL> update emp set sal = (case job when 'PRESIDENT' then sal+1000when 'MANGER' then sal+800else sal+400end);PL/SQL程序declare--定义光标 查询empno以及job岗位cursor c1 is select empno,job from emp;--声明一个变量 此变量与emp表中的job字段类型一致emp_job emp.job%type;--声明一个变量 此变量与emp表中的empno字段类型一致emp_empno emp.empno%type;--开始begin --打开光标 open c1; --循环开始 loop --取出光标 fetch c1 into emp_empno,emp_job; exit when c1%notfound;--判断光标是否存在 如果存在 则往下执行 否则 不执行 if emp_job='PRESIDENT' then update emp set sal =sal+1000 where empno=emp_empno; elsif emp_job='MANAGER' then update emp set sal =sal+800 where empno=emp_empno; else update emp set sal =sal+1000 where empno=emp_empno; end if; end loop;--退出循环 close c1;--关闭光标 end;--结束标识例二:找出7369的职位declare emp_job emp.job%type;begin select job into emp_job from emp where empno=7369;-----into方法,把查询出来的job 名放到emp_job中 dbms_output.put_line(emp_job);end;找出emp中的所有职位 declare--定义光标 查询job岗位cursor c1 is select job from emp;--声明一个变量 此变量与emp表中的job字段类型一致emp_job emp.job%type;--开始begin --打开光标 open c1; --循环开始 loop --取出光标 fetch c1 into emp_job; exit when c1%notfound;--判断光标是否存在 如果存在 则往下执行 否则 不执行 dbms_output.put_line(emp_job); end loop;--退出循环 close c1;--关闭光标 end;--结束标识例三:查找出所有的enamedeclarecursor c1 is select * from emp;emp_row emp%rowtype;beginopen c1;loopfetch c1 into emp_row;exit when c1%notfound;dbms_output.put_line(emp_row.ename);end loop;close c1;end;例四:查询部门号为10的员工信息declarecursor c1 (emp_deptno number) is select * from emp where deptno=emp_deptno;emp_row emp%rowtype;beginopen c1(10);dbms_output.put_line('部门号为10的员工信息');loop fetch c1 into emp_row; exit when c1%notfound; dbms_output.put_line('员工编号'||emp_row.empno||'员工姓名'|| emp_row.ename||'员工工资'|| emp_row.sal||'员工部门编 号'||emp_row.deptno);end loop;close c1;end;结果:部门号为10的员工信息员工编号7782员工姓名CLARK员工工资2450员工部门编号10员工编号7839员工姓名KING员工工资5000员工部门编号10员工编号7934员工姓名MILLER员工工资1300员工部门编号10带参数的光标例五:带有参数光标的练习SQL> declare 2 cursor c1(emp_deptno number) is select * from emp where deptno=emp_deptno; 3 emp_row emp%rowtype; 4 begin 5 open c1(10); 6 loop 7 fetch c1 into emp_row; 8 exit when c1%notfound ; 9 dbms_output.put_line('员工的名称'|| emp_row.ename || emp_row.job); 10 end loop; 11 close c1; 12 end; 13 / 结果:员工的名称CLARKMANAGER员工的名称KINGPRESIDENT员工的名称MILLERCLERK特别注意:
在打开游标之前最好先判断游标是否已经是打开的。
通过ISOPEN判断,格式:
游标%ISOPEN
IF mycur%ISOPEN
THEN
null ;
ELSE
OPENmycur ;
END IF ;
- PL/SQL程序之光标
- PL/SQL程序之光标
- PL/SQL之光标
- PL/SQL光标之带参数光标
- PL/SQL光标
- PL/SQL程序之例外
- PL/SQL程序之触发器
- PL/SQL 光标的使用
- PL/SQL带参数的光标
- pl/sql developer执行光标所在行
- Oracle PL/SQL光标的引入
- pl/sql developer执行光标所在行
- PL/SQL光标属性和光标数的限制
- PL/SQL程序设计之光标(游标)和例外的使用(二)
- PL/SQL程序单元
- PL/SQL程序块
- PL/SQL程序(一)
- 什么是PL/SQL程序
- 第5周实验报告1
- PL/SQL程序(一)
- 第五周实验报告1-3
- Nao机器人运行B-human代码之开始篇 1
- Android 打开URL
- PL/SQL程序之光标
- 第五周实验报告1-4
- PL/SQL程序之例外
- plan
- jave里JFormattedTextField的简单用法
- 11gr2RAC环境卸载
- learn pcl 03
- 云计算
- Pricing procedure for SD