1:游标简介
保存语句执行结果存储区域的指针
用于获取执行结果
2:游标分类
隐式游标:隐式定义的游标
显式游标:显式定义的游标
<2.1>:隐式游标概念
不需要显式定义即可使用的游标
PL/SQL环境进行声明和管理
又被称为SQL游标
专门处理SELECT…INTO, INSERT, DELETE, UPDATE语句
<2.2>:隐式游标的属性
SQL%FOUND: FETCH语句是否获取到了结果
SQL%ISOPEN: 游标是否处于打开的状态
SQL%NOTFOUND: FETCH语句是否没有获取到了结果
SQL%ROWCOUNT: 受语句影响的行数(游标中记录的行数)
事例:
declare
v_username varchar2(100);
begin
select 姓名 into v_username from tab_公司员工表 t where t.员工编号 = 'msdadmin' and t.systemid = '079';
dbms_output.put_line('查询到 ' || SQL%ROWCOUNT || ' 条记录');
if SQL%FOUND then
dbms_output.put_line('查询到数据,姓名为:' || v_username);
else
dbms_output.put_line('记录未找到');
end if;
end;
<2.3>:显式游标概念
需要显式定义即可使用的游标
用户进行声明和管理
<2.4>:显式游标操作模型
声明:CURSOR cursor_name[(param type, …)] IS select_statement;
打开: OPEN cursor_name[(parameter)];
获取数据:FETCH cursor_name INTO variable;
关闭:CLOSE cursor_name;
<2.5>:显式游标的属性
%FOUND: FETCH语句是否获取到了结果
%ISOPEN: 游标是否处于打开的状态
%NOTFOUND: FETCH语句是否没有获取到了结果
%ROWCOUNT: 游标中记录的行数
事例1:
declare
cursor curemp is
select * from tab_公司员工表 t where t.systemid = '079';
v_row curemp%rowtype;
begin
OPEN curemp;
loop
FETCH curemp INTO v_row;
exit when curemp%NOTFOUND;
dbms_output.put_line(v_row.员工编号 || ' ' || v_row.姓名);
end loop;
CLOSE curemp;
end;
事例2:
declare
cursor curemp is
select * from tab_公司员工表 t where t.systemid = '079';
begin
for c in curemp loop
dbms_output.put_line(c.员工编号 || ' ' || c.姓名);
end loop;
end;
事例3:带参数游标
declare
cursor curemp(systemid varchar2) is
select * from tab_公司员工表 t where t.systemid = systemid;
v_row curemp%rowtype;
begin
OPEN curemp('079');
loop
FETCH curemp INTO v_row;
exit when curemp%NOTFOUND;
dbms_output.put_line(v_row.员工编号 || ' ' || v_row.姓名);
end loop;
CLOSE curemp;
end;