zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性
    15分钟在笔记本上搭建 Kubernetes + Istio开发环境
    idea 插件的使用
    jQuery获取select元素选择器练习
    【Maven】添加ueditor到maven本地仓库
    jQuery序列化乱码解决
    Linux安装RedHat
    MyBatis SQL xml处理小于号与大于号
    js判断数据类型
    基于SSM框架的通用权限框架设计
  • 原文地址:https://www.cnblogs.com/guohu/p/11008212.html
Copyright © 2011-2022 走看看