zoukankan      html  css  js  c++  java
  • oracle 游标的理解

    ①游标的状态是通过属性来表示。
      %Found :Fetch语句(获取记录)执行情况True or False。--是否指向有效行。
      %NotFound : 最后一条记录是否提取出True or False。
      %ISOpen : 游标是否打开True or False。
      %RowCount :游标当前提取的行数 。

    所谓游标就是有没有一个箭头指向一条记录(自己得理解),


    declare
    cursor c is select * from emp;
    v_b emp%rowtype;
    begin
    open c;
    loop
    fetch c into v_b;
    exit when c%notfound;
    p(v_b.ename||'liyang');
    end loop;
    close c;
    end;

    declare
    cursor c is select * from emp;
    v_b emp%rowtype;
    p//是为了方便简写定义的一个存储过程就是dbms_outpue.putline的意思
    begin
    open c;
    loop
    fetch c into v_b;
    p(v_b.ename||'liyang');

    exit when c%notfound;
    end loop;
    close c;
    end;

    理解:上面这2个结果是不一样的,%notfound是指游标当前指向记录是否有数据,%found是指游标当前指向是否有数据,

    为什么后面一个要多输出一个呢,是最后一步抓取的时候没抓取成功,v_b还是上一条记录的数据,所以会多输出一次。

    SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。

    begin
    update emp set ENAME='ALEARK' WHERE EMPNO=7469;
    if sql%isopen then
    dbms_output.put_line('Openging');
    else
    dbms_output.put_line('closing');
    end if;
    if sql%found then
    dbms_output.put_line('游标指向了有效行');--判断游标是否指向有效行
    else
    dbms_output.put_line('Sorry');
    end if;
    if sql%notfound then
    dbms_output.put_line('Also Sorry');
    else
    dbms_output.put_line('Haha');
    end if;
    dbms_output.put_line(sql%rowcount);
    exception
    when no_data_found then
    dbms_output.put_line('Sorry No data');
    when too_many_rows then
    dbms_output.put_line('Too Many rows');
    end;

    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    所有程序员都是自学成才
    Xcode6模拟器路径
    Xcode7中模拟器的位置
    数据结构中的二级指针和引用
    02_线性表的链式表示和实现
    Spring 单例 httprequest 线程安全
    Springboot listener
    Spring单例 和 Scope注解
    红黑树
    线程池
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3446104.html
Copyright © 2011-2022 走看看