您的位置:首页 > 数据库 > Oracle

Oracle 游标操作

2016-08-05 14:17 441 查看

游标

sql语言分为六种,其中CCL:Cursor Control Language游标控制语言

简单定义:游标是指向结果集的指针,类似迭代器Iterator

一开始指向结果集的第一条记录之前的记录,每fetch一次往下移动一条记录,返回指针指向的当前记录。

游标的操作

(1) 声明游标—–>cursor c is selsect * from emp

(2) 开启游标——>open c;

(3) 迭代抓取游标——>用循环遍历

(4) 最后关闭游标——>close c;

DECLARE
--1,声明游标
CURSOR c IS
SELECT * FROM emp;
v_emprow emp%ROWTYPE;

BEGIN
--2,开启游标

OPEN c;
--3,循环抓取游标

LOOP
FETCH c INTO v_emprow;
EXIT WHEN(c%Notfound);
--必须要写到exit when 后面
dbms_output.put_line(v_emprow.ename);
END LOOP;

--4,关闭游标
CLOSE c;
END;


用whil循环遍历

DECLARE
--1,声明游标
CURSOR c IS
SELECT * FROM emp;
v_emprow emp%ROWTYPE;
BEGIN
--2,开启游标
OPEN c;
--3,循环抓取游标
FETCH c INTO v_emprow;
while(c%FOUND) LOOP
dbms_output.put_line(v_emprow.ename);
FETCH c INTO v_emprow;
END LOOP;

--4,关闭游标
CLOSE c;
END;


使用for循环遍历,for循环会自动开启游标,自动迭代抓取游标,自动关闭游标。

DECLARE
--1,声明游标
CURSOR c IS
SELECT * FROM emp;
BEGIN
FOR v_emprow IN c LOOP
dbms_output.put_line(v_emprow.ename);
END LOOP;
END;


带参数的游标

declare
-- 查询部门编号为 10的, 工种为 'CLERK'的职员的姓名
cursor c(v_deptno emp.deptno%type,v_job emp.job%type) is
select * from emp where deptno=v_deptno and job=v_job;
--v_emp emp%rowtype;
begin
for v_emp in c(10,'CLERK') loop
dbms_output.put_line(v_emp.ename);
end loop;
end;


可更新的游标 …………for update ……………current of………………..

DECLARE
--1,声明游标
CURSOR c IS
SELECT * FROM emp1 FOR UPDATE;
BEGIN
FOR v_emprow IN c LOOP
update emp1 set sal=sal*2 where current of c;
END LOOP;
END;


隐式游标

SQL%rowcount 返回最后一条sql语句影响的行数,查看操作是否成功,

DECLARE
--1,声明游标
v_count NUMBER(2);
CURSOR c IS
SELECT * FROM emp1 FOR UPDATE;
BEGIN
FOR v_emprow IN c LOOP
update emp1 set sal=sal*2 where current of c;
END LOOP;
--dbms_output.put_line(''||ROWCOUNT);
v_count:=SQL%ROWCOUNT;
dbms_output.put_line(v_count);

END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: