zoukankan      html  css  js  c++  java
  • Oracle游标

    游标分显示游标跟隐式游标,它们都具有%FOUND、%NOTFOUND、%ISOPEN、%ROWCOUNT四个属性。

    %FOUND:如果SQL语句至少影响到一行数据,则该属性为true,反之为false。

    %NOTFOUND:与%FOUND相反。

    %ISOPEN:判断游标是否打开。

    %ROWCOUNT:返回爱SQL语句影响的行数。

    1.显示游标

     Oracle的游标可以设置参数值,如下,IN表示参数的方向,可以省略,参数的类型不需要指定长度

    DECLARE CURSOR emp_cur(jobName IN VARCHAR2:='SALESMAN') IS
    SELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB=jobName;
    

    1.1用变量接收值。游标循环时用参数接收值,类似于MS SQL SERVER 的游标。

    DECLARE EMP_NO EMP.EMPNO%TYPE;
            EMP_NAME EMP.ENAME%TYPE;
            EMP_SAL EMP.SAL%TYPE;
    BEGIN
      OPEN emp_cur('MANAGER'); --打开游标
      FETCH emp_cur INTO EMP_NO,EMP_NAME,EMP_SAL;  --读取第一行
      WHILE emp_cur%FOUND LOOP  --循环判断,用%FOUND 返回TRUE则表示读取到了
        DBMS_OUTPUT.put_line('FETCH CURSOR--'||EMP_NO||'--'||EMP_NAME||'--'||'--'||EMP_SAL);
        FETCH emp_cur INTO EMP_NO,EMP_NAME,EMP_SAL; --读取下一行
      END LOOP;
    END;
    
    
    END;
    

    1.2 用记录类型

    DECLARE CURSOR cur_emp(var_job IN VARCHAR2:='SALESMAN') IS
    SELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB=var_job;
    
    TYPE emp_record IS RECORD --定义记录类型
    (
         EMPNO EMP.EMPNO%TYPE,
         ENAME EMP.ENAME%TYPE,
         SAL EMP.SAL%TYPE
    );
    emp_row emp_record;  --定义类型对象
    BEGIN
      OPEN cur_emp('MANAGER');
      FETCH cur_emp INTO emp_row; --读取数据到记录对象
      WHILE cur_emp%FOUND LOOP
        DBMS_OUTPUT.put_line(emp_row.EMPNO||'--'||emp_row.ENAME||'--'||'--'||emp_row.SAL);
        FETCH cur_emp INTO emp_row;
      END LOOP;
      CLOSE cur_emp; --关闭游标
    END;
    

    1.3 FOR循环读取游标

    1.3.1 读取游标

    DECLARE CURSOR mycur(VAR_JOB VARCHAR2:='SALESMAN') IS
    SELECT * FROM EMP WHERE JOB=VAR_JOB;
    BEGIN
      FOR cur IN mycur LOOP
        DBMS_OUTPUT.put_line(cur.EMPNO||'--'||cur.ENAME||'--'||'--'||cur.SAL||'--'||cur.JOB);
        END LOOP;
      END;
    

    1.3.2 直接循环SQL语句

    FOR cur IN (SELECT * FROM EMP) LOOP
       DBMS_OUTPUT.put_line('FOR--'||cur.EMPNO||'--'||cur.ENAME||'--'||'--'||cur.SAL||'--'||cur.JOB);
    END LOOP;
    

    2.隐式游标

    2.1在执行一个SQL,ORACLE会自动的创建一个隐式游标,如INSERT,UPDATE,DELETE语句。使用时需要在属性前面加上隐式游标默认的标识--SQL

    --INSERT INTO EMP VALUES('7935','KEN','ENGINEER',7902,SYSDATE,2000,'',20);
    UPDATE EMP SET SAL=SAL+100; IF SQL%NOTFOUND THEN DBMS_OUTPUT.put_line('NOTFOUND'); ELSE DBMS_OUTPUT.put_line(SQL%ROWCOUNT||'受影响'); END IF;
  • 相关阅读:
    使用php语言生成二维码
    简单的二级目录 操作
    上传图片 以及做成缩略图
    第一天 :学习node.js
    中文api接口
    PHP中获取当前页面的完整URL
    tp中session用来做权限方法 (缓解mysql压力)
    时间倒计时
    static关键字
    Windows程序内部运行原理简介
  • 原文地址:https://www.cnblogs.com/foxting/p/6919956.html
Copyright © 2011-2022 走看看