Oracle pl/sql 游标

来源:互联网 发布:php 类调用静态方法 编辑:程序博客网 时间:2024/05/16 16:13
 概念:在pl/sql中,不能直接执行select * from emp;等这样的语句,如果需要读取表中的数据,必须使用游标。游标的四个步骤:    1、声明游标        cursor 游标名(参数列表) is select 查询语句;    2、打开游标        open 游标名;    3、提取游标数据    4、关闭游标         close 游标名;案例:    declare        dname_ dept.dname%type;        cursor c is select dname from dept;  --声明游标    begin           open c;  --打开游标        fetch c into dname_;  --读取第一行数据        while c%found             loop                dbms_output.put_line(dname_);                fetch c into dname_;            end loop;        close c;  --关闭游标    end;

带参数的游标
DECLARE
dname_ dept.dname%TYPE;
–1、声明游标
CURSOR c(n INT)
IS SELECT dname FROM dept WHERE mod(deptno, n) = 0;
BEGIN
–2、打开游标
OPEN c(20);
–3、提取游标数据
FETCH c INTO dname_;
WHILE c%FOUND LOOP
dbms_output.put_line(dname_);
FETCH c INTO dname_;
END LOOP;
–4、关闭游标
CLOSE c;
END;
隐式游标:
在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域,隐式游标主要是处理数据操纵语句(如update,delete语句)的执行结果,当然特殊情况下,也可以处理select语句的查询结果。由于隐式游标也有属性,当使用隐式游标属性时,需要在属性前面加上隐式游标的默认名称–SQL。在实际编程中,经常使用隐式游标来判断更新数据行或删除数据行的情况。
案例:
declare
n int;
begin
insert into dept values(80,’新部门’,’不知道’);
n:=sql%rowcount;
dbms_output.put_line(n);
end;

将表中的数据保存到表类型
DECLARE
CURSOR c IS SELECT * FROM dept;–定义游标
TYPE t IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;–表类型t
v t; – 表类型变量v
i INT := 0; –表类型的元素索引
BEGIN
OPEN c; –打开游标
FETCH c INTO v(i); –提取游标,并将提取的行放到表类型中
WHILE c%FOUND LOOP
i := i + 1;
FETCH c INTO v(i);
END LOOP;
CLOSE c;

原创粉丝点击