zoukankan      html  css  js  c++  java
  • oracle pl/sql之游标

    前情提要:

    在通过select语句查询是,返回的结果通常是多行记录组成的集合。为此SQL提供 了游标机制。游标可以充当指针的作用,使应用程序设计语言一次只能处理查询记过中的一行。在Oracle中,可以使用隐式和显示两种游标。在pl/sql 中程序所有发出的DML和select语句,Oracle都会自动声明“隐式游标”。为了处理由select语句返回的一组记录,需要在pl/sql程序中申明和处理“显示游标”。


    隐式游标

    游标的主要属性如下:
    %found 布尔型属性,如果SQL语句至少影响一行,则为true,否则为false
    %notfound 布尔型属性,与%found相反
    %isopen 布尔型属性,当游标已打开时返回true,游标关闭为false
    %rowcount 数字型属性,返回受sql语句影响的行数

    如果执行了一个select语句则可以通过SQL%ROWCONT来检查受影响的行数,还可以通过SQL%FOUND属性值是否为true,以检查SQL语句是否影响到了任何行。
     
    程序演示:
     
       DECLARE
          
        BEGIN
          UPDATE emp SET sal=1500 WHERE deptno=20;
          IF SQL%FOUND THEN
            dbms_output.put_line('更新了'||sql%ROWCOUNT||'行');
            ELSE
              dbms_output.put_line('没有更新');
              END IF;
          END;
     
     

    显示游标:

    显示游标是在pl/sql程序中使用包含select语句来声明的游标。如果需要处理从数据库中检索的一组记录,则可以使用显示游标。使用显示游标处理数据需要4个PL/SQL步骤
    声明游标,打开游标,检索数据和关闭游标

    声明游标:

    CURSOR 游标名[(参数数据类型[参数数据类型...])]

    IS SELECT语句;

     

    打开和关闭游标:

     

    打开游标就是执行声明游标所指定的查询语句。游标必须声明后才能打开,打开游标也就是调用游标中的select语句。打开游标的过程非常简单,只需要使用关键字OPEN并指定打开的游标名及传递的参数值

     

    open 游标名[(参数数据类型[参数数据类型...])];

     

     例如,要打开上面声明的游标emp_cursor,可以使用如下代码:

     

    open emp_cursor;

     

    如果执行该语句,其输入的参数就是默认值,将会把SMITH的信息查询出来,如果要查KING 的信息

     

    open emp_cursor('KING ');

     


     

    关闭游标使得用户不能再从查询结果中检索数据。使用完游标后应该马上关闭游标,释放select查询结果。如果关闭上面定义的游标emp_cursor,可以使用如下语句:

     

    close emp_cursor;

     

    检索数据:

     

    检索数据就是从检索到的结果集中获取数据保存到变量中,以遍在程序中进行处理。这4个操作步骤在程序中是依次进行的,即只有先声明游标才能打开,一旦打开游标就能从获取数据,当不需要数据时就关闭游标

     

    游标声明中的select语句返回一组数据,open语句执行了select语句,close语句释放select语句的查询结果。而这一切工作都是为了从检索数据

     

    检索数据使用fetch语句找出结果集中的单行,并从中提取单个值传给主变量语法如下:

     

    fetch cursor_name into {variable_list|recod_variable};
     
    程序演示:

          DECLARE
              CURSOR my_cursor(in_no IN PLS_INTEGER) IS SELECT * FROM emp WHERE deptno=in_no;
              cuesor_result emp%ROWTYPE;
          BEGIN
            OPEN my_cursor(20);
            LOOP
            FETCH my_cursor INTO cuesor_result;
            EXIT WHEN my_cursor%NOTFOUND;
            dbms_output.put_line(cuesor_result.ename);
            END LOOP;
            END;

    游标for循环:

    在pl/sql中还有一种更加方便的使用显示游标的方法,那就是游标for循环,游标for循环是显示游标的一种快捷方式,它使用for循环依次读取结果集 中的行数据,当for循环开始时游标自动打开(不需要使用open方法)每循环依次,系统自动读取游标当前行的数据(不需要使用FETCH),当退出 for循环时,游标自动关闭(不需要使用close)


    程序演示:
     
    DECLARE
      CURSOR my_cursor(in_no IN PLS_INTEGER) IS SELECT * FROM emp WHERE deptno=in_no;
     
    BEGIN
      FOR r IN my_cursor(20)   LOOP
        dbms_output.put_line(r.ename);
        END LOOP;
      END;

           

     

     

  • 相关阅读:
    使用opencv工程
    面试官最爱问的问题背后真相
    哎,哎,去了清华园
    突然发现兰皙欧洗面奶不错
    crs.exe 进程管理里面的流氓进程之封杀
    初步使用OpenCV
    动态网站基础
    Java IO -- 序列化的疑问
    建造模式
    MYSQL 从头开始-2(join)
  • 原文地址:https://www.cnblogs.com/ztyy04126/p/4896973.html
Copyright © 2011-2022 走看看