PL/SQL第三章--光标

光标 就是一个结果集 相当于java中的resultset

语法: cursor 光标名 [(参数名 数据类型【参数名 数据类型】...)] is select 语句;

打开光标-- open c1;

关闭光标-- close c1;

取一行光标的值-- fetch c1 into 变量名;(取一行到变量中)

光标的属性

%found

%notfound

案例-1 使用光标查询员工姓名和工资,并打印

扫描二维码关注公众号,回复: 2768395 查看本文章

set serveroutput on

declare

--定义一个光标

cursor cemp is select ename,sal from emp;

--为光标定义对应的变量

pename emp.ename%type;

psal emp.sal%type;

begin

--打开光标

open cemp;

loop

--取一条记录

fetch cemp into pename,psal;

--循环什么时候退出?fetch语句不一定能取到记录

exit when cemp%notfound;

--打印

dbms_output.put_line(pename||'的薪水是'||psal);

end loop;

--关闭光标

close cemp;

end;

/

实例:给员工涨工资

set serveroutput on 

declare

--定义光标代表给哪些员工涨工资

cursor cemp is select empno,empjob from emp;

pempno emp.empno%type;

pjob       emp.empjob%type;

begin

rollback;

open cemp;

loop

fetch cemp into pempno,pjob;

exit when cemp%notfound;

if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;

elsif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno;

end if;

end loop;

close cemp;

--对于oracle默认的事务隔离级别是read commited

--事务的ACID: 原子性 一致性 隔离性 持久性

commit;

dbms_output.put_line('涨工资完成');

end;

/

光标的属性

%found %notfound %isopen判断光标是否打开 %rowcount影响的行数

光标的限制

默认情况下oracle数据库只允许在同一个会话中,打开300个光标

修改系统的参数设置

alter system set open_cursors=400 scope=both;

scope的取值:both memory spfile(数据库需要重启)

带参数的光标

语法: cursor 光标名 [(参数名 数据类型【参数名 数据类型】...)] is select 语句;

--查询某个部门中员工的姓名

set serveroutput on

declare

--定义带参数的光标

cursor cemp(dno number) is select ename from emp where deptno=dno;

pename emp.ename%type

begin

open cemp(10);

loop

--取出每个员工的姓名

fetch cemp into pename;

exit when cemp%notfound;

end loop;

end;

/

猜你喜欢

转载自blog.csdn.net/little_____white/article/details/81458858
今日推荐