欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PL/PQL游标

程序员文章站 2024-02-10 15:47:58
...

1.pL/PQL练习
游标分为四部分:
声明游标-开启游标-读取游标-关闭游标
  其中读取游标可能是个反复的过程,读取游标后要判断读取的数据是否为空,不为空继续读取下一行,直到数据为空时候,执行下一步关闭游标
1、显示的游标

DECLARE
--1.声明游标cursor cur_emp
cursor cur_emp(var_job in VARCHAR2:='SALESMAN')is select EMPNO,ENAME,SAL from EMP where job=var_job;
type record_emp is record(
var_empno emp.empno%type,
var_ename emp.ename%type,
var_sal emp.sal%type
);
emp_row record_emp;
begin open cur_emp('MANAGER');//开启游标begin open cur_emp
fetch cur_emp into emp_row;//读取游标,先让指针指向结果集的第一行,并保存到emp_row中
while cur_emp %found loop//循环读取数据
dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||',工资是'||emp_row.var_sal);
fetch cur_emp into emp_row;//让指针指向结果集的下一行,并保存到emp_row中
end loop;
close cur_emp;//关闭游标close cur_emp
end;

2、游标的属性
%found结果至少影响一行的时候为true,否则为fasle
%notfound和%found功能相反
%rowcount返回sql受影响的行数
%isopen判断游标是否开启

 DECLARE
var_ename VARCHAR2(50);
var_job VARCHAR2(20);
cursor cur_emp is select ename,job from emp where empno=7499;
begin 
open cur_emp;
fetch cur_emp into var_ename,var_job;
if cur_emp %found then 
dbms_output.put_line(var_ename||'的职务是'||var_job);
else 
dbms_output.put_line('无记录');
end if;
end;

3.隐式游标
在执行sql语句时,oracle会自动创建一个隐式游标,这个游标是内存中处理该语句的工作区域,隐式游标主要是处理增加和修改,使用隐式游标属性要加默认名称-SQL

 DECLARE
var_ename VARCHAR2(50);
var_job VARCHAR2(20);
cursor cur_emp is select ename,job from emp where empno=7499;
begin 
open cur_emp;
fetch cur_emp into var_ename,var_job;
if cur_emp %found then 
dbms_output.put_line(var_ename||'的职务是'||var_job);
else 
dbms_output.put_line('无记录');
end if;
end;