• oracle 游标


     游标:隐式游标和显示游标。

    1 隐式游标

    隐式游标种类:

    DML操作和单行SELECT语句会使用隐式游标,它们是: 
    * 插入操作:INSERT。 
    * 更新操作:UPDATE。 
    * 删除操作:DELETE。 
    * 单行查询操作:SELECT ... INTO ...(一次只能从数据库中提取一行数据,获取多行数据用显示游标)。 

    游标属性:

    隐式游标的属性 返回值类型   意    义   
    SQL%ROWCOUNT    整型  代表DML语句成功执行的数据行数   
    SQL%FOUND   布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功   
    SQL%NOTFOUND    布尔型 与SQL%FOUND属性返回值相反   
    SQL%ISOPEN  布尔型 DML执行过程中为真,结束后为假
    

    示例1:使用隐式游标的属性,判断对雇员工资的修改是否成功。 

    BEGIN
      UPDATE emp SET sal = sal + 100 WHERE empno = 1234;
      IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');
        COMMIT;
      ELSE
        DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');
      END IF;
    END;
    

      

    2 显示游标

    游标步骤:声明游标 、打开游标 、提取数据、关闭游标。

    显式游标的属性:

    游标的属性   返回值类型   意    义   
    %ROWCOUNT   整型  获得FETCH语句返回的数据行数   
    %FOUND  布尔型 最近的FETCH语句返回一行数据则为真,否则为假   
    %NOTFOUND   布尔型 与%FOUND属性返回值相反   
    %ISOPEN 布尔型 游标已经打开时值为真,否则为假  
    

      

    DECLARE
      V_ename VARCHAR2(10);
      CURSOR emp_cursor IS
        SELECT ename FROM emp;
    BEGIN
      OPEN emp_cursor;
      IF emp_cursor%ISOPEN THEN
        LOOP
          FETCH emp_cursor
            INTO v_ename;
          EXIT WHEN emp_cursor%NOTFOUND;
          DBMS_OUTPUT.PUT_LINE(to_char(emp_cursor%ROWCOUNT) || '-' || v_ename);
        END LOOP;
      ELSE
        DBMS_OUTPUT.PUT_LINE('用户信息:游标没有打开!');
      END IF;
      CLOSE emp_cursor;
    END;
    

      

    2.1 fetch 读取游标

    declare
      zb_row scsj_zb%rowtype;
      cursor my_cursor is
        select * from scsj_zb where rownum < 3;
    begin
      open my_cursor;
    
      for i in 1 .. 3 loop
        fetch my_cursor
          into zb_row;
        dbms_output.put_line(zb_row.zb_bm);
      end loop;
    
      close my_cursor;
    end;
    
    declare
      zbbm varchar(50);
      zbmc varchar(50);
      cursor my_cursor is
        select zb_bm, zbmc from scsj_zb a where rownum < 3;
    begin
      open my_cursor;
    
      for i in 1 .. 3 loop
        fetch my_cursor
          into zbbm, zbmc;
        dbms_output.put_line(zbbm || ':' || zbmc);
      end loop;
    
      close my_cursor;
    end;
    

      

    SET SERVEROUTPUT ON    
    BEGIN  
     FOR re IN (SELECT ename FROM EMP)  LOOP   
      DBMS_OUTPUT.PUT_LINE(re.ename)   
     END LOOP;   
    END;  
    

      

    2.2 for 读取游标

    declare
      cursor my_cursor is
        select * from scsj_zb where rownum < 3;
    begin
      for my_row in my_cursor loop
        dbms_output.put_line(my_row.zb_bm);
      end loop;
    end;
    

    详细介绍:https://www.cnblogs.com/guohu/p/11007352.html

  • 相关阅读:
    Windows Live Writer 语法高亮
    二十一、Java基础--------IO流之综合案例分析
    二十、Java基础--------IO流之其他对象
    十九、Java基础--------IO流之字节流
    十八、Java基础--------IO流体系以及字符流
    十七、Java基础---------集合框架之Map
    十六、Java基础---------集合框架之Set
    十五、Java基础---------集合框架体系以及List
    十四、Java基础---------String、StringBuffer、StringBuilder基本应用
    十三、Java基础---------多线程总结
  • 原文地址:https://www.cnblogs.com/guohu/p/11008212.html
Copyright © 2020-2023  润新知