• oracle 学习(四)游标


    • 显式游标
    • 隐式游标:如果在PL/SQL程序段中使用SELECT语句进行操作,PL/SQL 会隐含的处理游标定义,即为隐式游标。这种游标不需要像显式那样声明,也不必打开关闭。
      • 1 CREATE OR REPLACE PROCEDURE CX_XM
        2 (in_xh IN char,out_xm OUT varchar2)
        3 AS
        4 BEGIN
        5      SELECT 姓名 INTO out_xm
        6              FROM XSB
        7              WHERE 学号=in_xh AND ROWNUM=1;
        8       DBMS_OUTPUT.PUT_LINE(out_xm);
        9 END CX_XM;
        View Code
      • 注意
        1. 每一个隐式游标必须有一个INTO
        2. 与显式游标一样,就收数据的目标变量的数目、类型要与SELECT列表的一致。
        3. 隐式游标一次仅能返回一行数据,使用时必须检查一场,最常见的异常有“NO_DATA_FOUND"&"TOO_MANY_ROWS".
        4. 为确保隐式游标仅返回一行数据,可用ROWCOUNT=1来限定,表示返回第一行数据。
    • 游标for循环
      1 FOR<变量名>IN<游标名>[(<参数1>[,<参数2>...])]LOOP
      2             语句段
      3 END LOOP;
    • 游标变量REF CURSOR
      • 定义CURSOR类型
        TYPE<REF CURSOR 类型名>
        IS
        REF CURSOR[RETURN<返回类型>];
        
        eg:
        DECLARE
        TYPE xs_cur
          IS
          REF CURSOR RETURN XSB%ROWTYPE;
        View Code

        REF CURSOR类型既可以是强类型,也可以是弱类型。强REF CURSOR类型有返回类型;而弱类型没有

        1 DECLARE
        2    TYPE xs_cur IS REF CURSOR RETURN XSB%ROWTYPE;  /*强类型*/
        3    TYPE mycur IS REF CURSOR;                                      /*弱类型*/
        View Code
    • 带参数的游标
      • 1 游标的参数定义与子程序的参数定义完全相同 
        2 意义在于传递一个参数给游标指定取哪部分的内容
        3 <参数名>[参数模式]<参数类型>   ;参数模式默认为IN
        4 用open打开游标时,需要提供对应的实参
      • 实例
         1 /*查询各部门的雇员情况*/
         2 create or replace procedure proc as 
         3 BEGIN
         4 declare
         5 cursor dept_cur IS
         6 select department_id from departments;
         7 v_eid employees.employee_id % type;
         8 v_sal employees.salary % type;
         9 v_dept employees.department_id % type;
        10 cursor emp_cur(v_deptid number) is 
        11 select employee_id,salary from employeeS where department_id=v_deptid;
        12 BEGIN
        13 for dept_record in dept_cur LOOP
        14   EXIT WHEN DEPT_CUR%NOTFOUND;
        15   OPEN EMP_CUR(dept_record.DEPARTMENT_ID);
        16   LOOP
        17   fetch emp_cur into v_eid,v_sal;
        18   EXIT WHEN EMP_CUR%NOTFOUND;
        19     insert into temp values(v_eid,v_sal);
        20     commit;
        21   end loop;
        22   close emp_cur;
        23 end loop;
        24 END;
        25 end proc;
        View Code
  • 相关阅读:
    centos 7离线安装中文版GitLab
    Oracle表名、列名、约束名的长度限制
    使用sparsecheckout命令克隆“部分”代码
    C专家编程(1)
    搜索相关性
    今日进度
    今日进度
    今日进度
    今日进度
    今日进度
  • 原文地址:https://www.cnblogs.com/yuelien/p/6629375.html
Copyright © 2020-2023  润新知