PL/SQL学习笔记之游标

 

一:游标

    Oracle会创建一个上下文区域,用于处理SQL语句,其中包含需要处理的语句、处理结果等等。

    游标指向这一上下文的区域。

    PL/SQL通过控制游标在上下文区域移动,来获取SQL语句的结果信息。

    有两种类型的游标:

  • 隐式游标

  • 显式游标

 

二:隐式游标

    对于DML操作(INSERT、UPDATE、DELETE)语句,Oracle会自动创建隐式游标指向该语句的上下文区域。

    对于隐式游标,我们无法通过游标名来显式操作它,但是可以通过一些通用的属性来获取到最近的隐式游标指向的上下文区域中的信息,主要有:

%FOUND    如果一个INSERT,UPDATE或DELETE语句影响了一行或多行或SELECT INTO语句返回一行或多行,返回TRUE;否则,它将返回FALSE。
%NOTFOUND    与%FOUND相反。如果一个INSERT,UPDATE或DELETE语句影响没有行或SELECT INTO语句返回任何行,返回TRUE。否则,它将返回FALSE。
%ISOPEN    隐式游标总是返回FALSE,因为Oracle执行其相关的SQL语句之后自动关闭SQL游标。
%ROWCOUNT    返回受INSERT,UPDATE,或DELETE语句,或SELECT INTO语句影响的行数。

    属性访问格式:sql%属性名

    例如:

DECLARE 
   total_rows number(2);
BEGIN
   UPDATE customers
   SET salary = salary + 500;
   IF sql%notfound THEN //获取执行结果
      dbms_output.put_line('no customers selected');
   ELSIF sql%found THEN
      total_rows := sql%rowcount;
      dbms_output.put_line( total_rows || ' customers selected ');
   END IF; 
END;

 

三:显式游标

    显式游标 在DECLARE部分被定义,一般用于指向SELECT语句的执行结果。

    

    1)创建游标

CURSOR cursor_name IS select_statement;

    2)打开游标

    打开游标分配内存,使得其接收所获取的sql语句的执行结果。

OPEN cursor_name;

    3)获取当前游标所指向的行

    获取一次,读取一行,并且读取完后自动移动到下一行。

FETCH cursor_name INTO 变量1, 变量2, 变量3...; //用变量依次获取当前行的各个字段值

    4)关闭游标

    关闭游标来释放分配的内存。

CLOSE cursor_name;

 

    5)例子

DECLARE
   c_id customers.id%type; //声明用于接收游标各个字段值的变量,变量的类型用  表名.字段名%type 来获取对应字段的数据类型
   c_name customers.name%type;
   c_addr customers.address%type;
   CURSOR c_customers is //声明游标
   SELECT id, name, address FROM customers;
BEGIN
   OPEN c_customers; //打开游标
   LOOP
      FETCH c_customers into c_id, c_name, c_addr; //获取当前游标执行值
      EXIT WHEN c_customers%notfound; //当游标指向末尾时,终止遍历
      dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
   END LOOP;
   CLOSE c_customers;
END;

 

转载于:https://www.cnblogs.com/ygj0930/p/8298187.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值