Oracle显式游标与隐式游标

编程入门 行业动态 更新时间:2024-10-26 07:24:44

Oracle显式<a href=https://www.elefans.com/category/jswz/34/1767796.html style=游标与隐式游标"/>

Oracle显式游标与隐式游标

ref cursor 定义方式参见

显式游标和隐式游标都可实现对记录的循环操作。显式游标需要用户遵循声明、打开、捕获记录、操作记录和关闭等步骤。隐式游标无须如此繁的步骤,而更接近于其他编程语言中的for循环。 虽然显式游标操作复杂,但使用上却可以更加灵活,例如,打开游标时传递参数,可以创建更加灵活多样的游标。相对而言,隐式游标步骤简练,但用户不能进行干预,因此适合于简单的游标操作。 一、显式游标: 可以方便地控制游标的生命周期。
1.声明游标: 语法:delcare cursor 游标名称 is 查询语句;
2.声明列变量: 语法:变量名 原列名%type; 
3.声明行变量: 语法:变量名 表名%rowtype;  如: declare cursor cu_employee is select * from employees; employee employees%rowtype; 注:选择的必须为所有列*。 4.使用显式游标: 打开游标: open 游标名称 捕获数据: fetch 游标名称 into 变量
5.使用普通变量获取游标信息: SQL> set serverout on; SQL> declare cursor cu_employee is select employee_id,employee_name,employee_age from employees; employee_id number; employee_name varchar2(20); employee_age number; begin open cu_employee; fetch cu_employee into employee_id,employee_name,employee_age; while cu_employee%found loop dbms_output.put_line(employee_id || ':' ||employee_name || ':' || employee_age); fetch cu_employee into employee_id,employee_name,employee_age; end loop; end; / 1:王晓:37 2:钟小平:32 3:刘俊:27 4:王龙:26 5:钟文:26 6:张三:25 7:李四:24 8:王五:25 19:Jamaly: 20:吖ling: PL/SQL procedure successfully completed
6.使用行类型变量来获取游标信息: SQL> declare cursor cu_employee is select *   --必须为* from employees; employee employees%rowtype; begin open cu_employee; fetch cu_employee into employee; while cu_employee%found loop dbms_output.put_line(employee.employee_id || ':' || employee.employee_name || ':' || employee.employee_age); fetch cu_employee into employee; end loop; close cu_employee; end; / 1:王晓:37 2:钟小平:32 3:刘俊:27 4:王龙:26 5:钟文:26 6:张三:25 7:李四:24 8:王五:25 19:Jamaly: 20:吖ling: PL/SQL procedure successfully completed 7.为游标传递参数: SQL> declare cursor cu_employee(minAge in number,maxAge in number) is select * from employees where employee_age>=minAge and employee_age<=maxAge; employee employees%rowtype; begin open cu_employee(21,30); fetch cu_employee into employee; while cu_employee%found loop dbms_output.put_line(employee.employee_id || ':' || employee.employee_name || ':' || employee.employee_age); fetch cu_employee into employee; end loop; close cu_employee; end; / 3:刘俊:27 4:王龙:26 5:钟文:26 6:张三:25 7:李四:24 8:王五:25 PL/SQL procedure successfully completed
8.游标属性: 8.1 found: fetch捕获记录成功。 8.2 not found: fetch捕获不成功。 8.3 rowcount: 返回当前时刻已捕获的记录数。 8.4 isopen: 游标是否打开。
二、隐式游标 分为sql隐式游标和 cursor for 游标。 1.查看sql 隐式游标的默认值: SQL> begin if sql%isopen then dbms_output.put_line('sql is open'); else dbms_output.put_line('sql is not open'); end if; dbms_output.put_line('rowcount is' || sql%rowcount); end; / sql is not open rowcount is
2.查询语句对sql隐式游标的影响: SQL> declare employee_age number; begin select employee_age into employee_age from employees where employee_id=1; if sql%isopen then dbms_output.put_line('sql 游标已打开'); else dbms_output.put_line('sql 游标未打开'); end if; dbms_output.put_line('游标捕获记录数: ' || sql%rowcount); end; / sql 游标未打开 游标捕获记录数: 1 3.更新语句对sql隐式游标的影响: 3.1  SQL> begin update employees set employee_age=employee_age+1; if sql%isopen then dbms_output.put_line('sql 游标已打开'); else dbms_output.put_line('sql 游标未打开'); end if; dbms_output.put_line('游标捕获记录数: ' || sql%rowcount); end; / sql 游标未打开 游标捕获记录数: 10
3.2 sql 游标属性信息保留为最后一条语句的更新信息。 SQL> begin update employees set employee_age=employee_age+1; insert into employees(employee_id,employee_name,employee_age) values(21,'Asha',23); if sql%isopen then dbms_output.put_line('sql 游标已打开'); else dbms_output.put_line('sql 游标未打开'); end if; dbms_output.put_line('游标捕获记录数: ' || sql%rowcount); end; / sql 游标未打开 游标捕获记录数: 1
4.sql 隐式游标的使用: 插入一条记录,如果存在对记录各列更新,否则,插入该记录: SQL> begin update employees set employee_name='MLing' ,employee_age=22 where employee_id=9; if sql%rowcount=0 then insert into employees(employee_id,employee_name,employee_age) values(9,'MLing',22); end if; end; / 5.cursor for 游标的使用: 语法: for 游标变量 in (查询) loop DML操作 end loop;
SQL> begin for employee in (select * from employees where employee_id<=6) loop dbms_output.put_line(employee.employee_id || ':' || employee.employee_name || ':' || employee.employee_age); end loop; end; / 1:王晓:39 2:钟小平:34 3:刘俊:29 4:王龙:28 5:钟文:28 6:张三:27

更多推荐

Oracle显式游标与隐式游标

本文发布于:2024-02-05 02:34:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1673450.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:游标   隐式   Oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!