zoukankan      html  css  js  c++  java
  • Oracle基础学习(四) 游标

    
    

    CURSOR 游标名 IS 操作语句; --1、定义游标

    OPEN 游标名; --2、打开游标
    LOOP
    FETCH 游标名 INTO 变量名; --3.读取游标
    EXIT WHEN 游标名%NOTFOUND;
    处理语句;
    END LOOP;
    CLOSE 游标名;--4.关闭游标



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

      1、声明游标:

           cursor curname is  select.......

        2、打开游标:

           open curname;

        3、提取数据:循环提取数据:游标中的谓词 curname%found 、curname%notfound。

           当结果集中的数据没有提取完时 %found的值true,否则是false.

           %notfound与%found 相反。通过两个谓词可以控制循环

           fetch  curname  into .......

        4、关闭游标

          close curname;

    ②遍历循环游标

    ⑴For 循环游标

    循环游标隐式打开游标,自动滚动获取一条记录,并自动创建临时记录类型变量存储记录。处理完后自动关闭游标。

    For 变量名 In 游标名

    Loop

    数据处理语句;

    End Loop;

    ⑵Loop循环游标

    。。。

    Loop

    Fatch 游标名InTo 临时记录或属性类型变量;

    Exit When 游标名%NotFound;

    End Loop;

    例子1:
    
      /* conn scott/tiger */
    
       Declare
    
         Cursor myCur is select empno,ename,sal from emp;
    
         vna varchar2(10);
    
         vno number(4);
    
         vsal number(7,2);
    
      Begin
    
         open myCur;
    
         fetch myCur into vno,vna,vsal;
    
         dbms_output.put_line(vno||'    '||vna||'    '||vsal);
    
         close myCur;
    
      End;
    
      /
    
    
     例子2:使用loop遍历游标。
    
      Declare
    
         Cursor myCur is select ename,job,sal,empno from emp;
    
         varE myCur%rowType;
    
      Begin
    
         if myCur%isopen = false then
    
            open myCur;
    
           dbms_output.put_line('Opening...');
    
         end if;
    
         loop
    
            fetch myCur into varE;
    
            exit when myCur%notfound;
    
            dbms_output.put_line(myCur%rowCount||'    '||vare.empno||'    '||vare.ename||'    '||vare.sal);
    
         end loop;
    
         if myCur%isopen then
    
            Close myCur;
    
            dbms_output.put_line('Closing...');
    
         end if;
    
      End;
    
      /
    
    
      例子3:使用For循环遍历游标,
    
      /* conn scott/tiger */
    
      Declare
    
         Cursor myCur is select * from emp;
    
      Begin
    
         for varA in myCur
    
          loop
    
             dbms_output.put_line(myCur%rowCount||'    '||varA.empno||'    '||varA.ename||'  '||varA.sal);
    
          end loop;
    
      End;
    
      /

      

    declare 
           --类型定义
           cursor c_job
           is
           select empno,ename,job,sal
           from emp
           where job='MANAGER';
           --定义一个游标变量
           c_row c_job%rowtype;
    begin
           open c_job;
             loop
               --提取一行数据到c_row
               fetch c_job into c_row;
               --判读是否提取到值,没取到值就退出
               --取到值c_job%notfound 是false 
               --取不到值c_job%notfound 是true
               exit when c_job%notfound;
                dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
             end loop;
           --关闭游标
          close c_job;
    end;
    --5:向游标传递一个工种,显示此工种的所有雇员的所有信息(使用参数游标)
    declare 
           cursor
           c_job(p_job nvarchar2)
           is 
           select * from emp where JOB=p_job;
           r_job emp%rowtype;
    begin 
           for r_job in c_job('CLERK') loop
               dbms_output.put_line('员工号'||r_job.EMPNO||' '||'员工姓名'||r_job.ENAME);
            end loop;
    end;
    SELECT * FROM EMP
  • 相关阅读:
    浅谈Charles —— 青花瓷
    jdbc
    装饰者模式
    java可变参数
    简单日历
    DVD管理系统
    图片拷贝
    时间输出
    java基础小知识
    jQuery HTML
  • 原文地址:https://www.cnblogs.com/jeffjoy/p/9209598.html
Copyright © 2011-2022 走看看