1、游标:用来处理从数据库中检索的多行记录(使用SELECT语句),通过遍历游标,我们可以对访问到每行记录的数据,并通过游标取出值,从而进行操作。
2、游标有什么用?
①指定结果集中特定行的位置。
②基于当前的结果集位置检索一行或连续的几行。
③直接利用游标更新数据,直接引用表中的行。
④可以以编程的方式访问数据库。
3、游标分类
显示游标(Explicit Cursor):在PL/SQL程序中明确定义的,用于查询的游标称作显示游标。
隐式游标(Implicit Cursor):没有PL/SQL程序中定义的,使用update/DELETE语句时,Oracle系统自动分配的游标。
4、使用步骤
显示游标:(1)定义 (2)打开 (3)使用 (4)关闭
隐式游标:对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。
set serveroutput on
(1)
create or replace PROCEDURE PROC_EMP1 AS
begin
declare
cursor cur_emp is select empno, ename from emp order by empno; --1.定义游标,名称为cur_emp
v_empno varchar2(4); --定义变量,存放游标取出的数据
v_ename varchar2(10);
begin
open cur_emp; --2.打开游标cur_emp
fetch cur_emp into v_empno, v_ename; --3.将游标的当前行取出存放到变量中
while cur_emp%found --游标所指还有数据行,则继续循环
loop
dbms_output.PUT_LINE('员工号:'||v_empno || ' '||'员工姓名:'|| v_ename); --打印结果
fetch cur_emp
into v_empno, v_ename; --继续将游标所指的当前行取出放到变量中
end loop;
close cur_emp; --4.关闭游标
end;
end PROC_EMP1;
/
(2)
create or replace PROCEDURE PROC_EMP2 AS
begin
update emp set ename = '张燕广' where empno = '1111'; --隐式游标使用
if SQL%NOTFOUND then
--如果更新没有匹配则插入一条新记录
insert into emp (empno, ename, SAL, COMM) values ('1111', '张燕广', 555, 666);
dbms_output.PUT_LINE('没有找到 张燕广,在表中新增了一条记录'); --打印提示
commit;
end if;
commit;
end PROC_EMP2;
/
5,Oracle游标的状态有哪些,怎么使用游标属性?
%Found :Fetch语句(获取记录)执行情况True or False。
%NotFound : 最后一条记录是否提取出True or False。
%ISOpen : 游标是否打开True or False。
%RowCount :游标当前提取的行数 。
begin
update emp Set SAL = SAL + 100 Where JOB = 'CLERK';
if SQL%Found Then
DBMS_OUTPUT.PUT_LINE('找到记录,修改成功!');
else
DBMS_OUTPUT.PUT_LINE('没有到记录,修改未成功!');
end if;
commit;
end;
/