了解 Oracle 的游标
程序员文章站
2024-02-10 13:39:10
...
了解 Oracle 的游标
一,概念:
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。
二, 作用:
用于定位结果集的行和遍历结果集
三, 使用:
创建一个游标:
TYPE ref_cur 定义类型变量 s ref cursor:相当于数据类型,不过是引用游标的数据类型。
TYPE ref_cur IS REF CURSOR
procedure call_del_ls(IN_PCH in varchar2) is
l_sql varchar2(100);
--1,创建游标类型
c_table_name ref_cur;
l_table_name varchar2(40);
l_id number;
begin
--2 游标是否打开,始终为FALSE;
if c_table_name%isopen then
CLOSE c_table_name;
end if;
-- 3,打开游标,SQL查询的结果集用 游标接收并且循环游标
open c_table_name for select table_name,to_number(id) id from LS_DE_TABLE order by id;
--4,循环遍历数据
loop
fetch c_table_name into l_table_name,l_id;
exit when c_table_name%notfound;
l_sql:='DELETE ls_'||l_table_name||' where pch = '''||IN_PCH||'''';
execute immediate l_sql;
commit;
end loop;
end;
也可以创建 游标 接受 SQL语句的结果集
cursor 游标名 ( 参数 ) [返回值类型] is select语句;
--1.声明游标
cursor vrows is select * from emp;
隐式游标:
SQL%ROWCOUNT 整型 返回结果集成功执行的数据行数
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
遍历游标 :
create or replace procedure myprocedure is
CURSOR CUR_TEST IS --声明显式游标
SELECT ECODE,ENAME
FROM EMP;
CUR CUR_TEST%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录
BEGIN
--For 循环
FOR CUR IN CUR_TEST LOOP
--循环体
DBMS_OUTPUT.PUT_LINE('员工编号:'||CUR.ECODE ||'员工姓名:'|| CUR.ENAME);
END LOOP;
--Fetch 循环
OPEN CUR_TEST;--必须要明确的打开和关闭游标
LOOP
FETCH CUR_TEST INTO CUR;
EXIT WHEN CUR_TEST%NOTFOUND;
--循环体
DBMS_OUTPUT.PUT_LINE('员工编号:'||CUR.ECODE ||'员工姓名:'|| CUR.ENAME);
END LOOP;
CLOSE C_EMP;
--While 循环
OPEN CUR_TEST;--必须要明确的打开和关闭游标
FETCH CUR_TEST INTO CUR;
WHILE CUR_TEST%FOUND LOOP
--循环体
DBMS_OUTPUT.PUT_LINE('员工编号:'||CUR.ECODE ||'员工姓名:'|| CUR.ENAME);
FETCH CUR_TEST INTO CUR;
END LOOP;
CLOSE C_EMP;
END myprocedure;