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

    Oracle游标
    概念:内存中的一块区域,存放select结果
    游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
    一、显示游标(处理返回多行数据的SELECT 语句)

    • 声明游标;CURSOR cursor_name IS select_statement
    • 为查询打开游标;OPEN cursor_name
    • 取得结果放入PL/SQL变量中;
    1 FETCH cursor_name INTO list_of_variables;
    2 FETCH cursor_name INTO PL/SQL_record; 
    • 关闭游标CLOSE cursor_name

    二、隐式游标(所有的隐式游标都被假设为只返回一条记录。)
    使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。

    1 SELECT studentNo,studentName
    2 INTO curStudentNo,curStudentName
    3 FROM StudentRecord
    4 WHERE name=’gg’;

    上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值
    特点:

    • 隐式游标是单条sql语句所产生的结果集合
    • 多条sql语句,隐式游标指向最后一条sql语句的结果
    • 主要用在update和delete上

    三、实际操作游标
    1、for循环游标
    (1)定义游标
    (2)定义游标变量
    (3)使用for循环来使用这个游标
    四、游标的四个属性

    • %notfound fetch是否提到数据 没有true 提到false
    • %found fetch是否提到数据 有true 没提到false
    • %rowcount 已经取出的记录的条数
    • %isopen 布尔值 游标是否打开

    小细节:
    1、区别
    %TYPE 声明一个列类型
    %ROWTYPE 声明一个行类型
    好处:更改了列、行的长度或者数据类型,会自动进行调整
    2、游标和游标变量区别
    oracle游标只是数据库中一个命名的工作区,当游标声明后,就与一个固定的sql关联
    游标变量可以与不同的SQL语句关联,在运行时取不同的sql语句,指向不同的工作区
    3、oracle中的弱游标有返回值,而且必须是%rowtype类型,而强游标无返回值
    4、exit when语句一定要紧跟在fetch之后。必避免多余的数据处理

    五、实际代码

    简单的游标查询

     1 --声明游标并且赋值(通过sql语句)
     2 declare
     3 cursor retail is select * from retailretnotice;    
     4 --声明游标变量
     5 sheet_cur retailretnotice%rowtype;    
     6 --开始for循环
     7 begin                                        
     8 --开始循环
     9 open retail;                                
    10 --开启游标
    11 loop                                        
    12 --开启循环
    13 exit when retail%notfound;                    
    14 --当游标没有提到数据,退出
    15 fetch retail into sheet_cur;                
    16 --循环游标(使用fetch游标,必须明确的打开和关闭)
    17 dbms_output.put_line(sheet_cur.sheetid);    
    18 --输出数据
    19 end loop;                                    
    20 --结束循环
    21 --关闭游标
    22 close retail;
    23 end;

    在Oracle中,有更简洁的方法

    1 begin
    2 for R in (select * from retailretnotice)
    3   loop
    4     dbms_output.put_line(R.sheetid);
    5   end loop;
    6 end;

    for循环游标
    1、声明游标(并且赋值)
    2、声明游标变量
    3、进行for循环输出

    博客园:http://www.cnblogs.com/zhuziyu/
    Copyright ©2018 不是植物
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    C#读写xml文件
    XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
    C#异步批量下载文件
    echarts的markline的使用 y轴预警线
    Bootstrap-table 增删改查
    二维数组 和 稀疏数组的相互转换 及 数据存入文件中
    Bootstrap-table实现动态合并相同行
    echarts 中 参数的详讲
    BootstrapTable的简单使用教程
    遍历List 中 Map 的值
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/8430233.html
Copyright © 2011-2022 走看看