- 浏览: 269816 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
yh008:
不错的工具类。 版面需要调整下,有些内容看不到了,只能复制粘贴 ...
Spring 优秀工具类盘点,第 1 部分: 文件资源操作二 -
手心的水滴:
function Foo() { (function( ...
js 两个小括号 ()() 的用法 -
showthesunli:
博主说了这么多,我来说说我的想法,不晓得对不对总结一下,如下代 ...
js 两个小括号 ()() 的用法 -
aqbzwxd:
就是这种盲目无原理依据的研究测试弄晕了我, 有必要这么做吗? ...
js 两个小括号 ()() 的用法 -
wst0350:
多谢
oracle 触发器
在oracle9i之前,为了查询处理select语句返回的多行数据,开发人员必须要使用显示游标,在oracle9i开始,开发人员即可以使用显示游标处理多行数据,也可以使用select ...bulk collect into 语句处理多行数据。
一、显示游标
PL/SQL包含隐藏游标和显示游标等两种游标类型,其中隐藏游标用于处理select into和DML语句,而显示游标用于专门处理select语句返回多行数据。
1、使用显示游标
为了处理select语法返回的多行数据,开发人员可以使用显示数据,使用显示数据包括定义游标、打开游标、提取游标、和关闭游标四个阶段:
(1)、定义游标:
在使用显示游标之前,必须首先在定义部分定义游标,定义游标用于指定游标所对应的select语句,语法如下:
cursor cursor_name is select_statement;
如上所示,cursor_name用于指定游标的名称,select_statement用于指定游标所对应的select语句,
(2)打开游标:
当打开游标时,oracle会执行游标所对应的select语句,并且将select语句的结果暂时保持到结果集中,语法如下;
open cursor_name;
该游标名称必须在定义部分定义成游标。
(3)、提出数据
在游标打开之后,select语句返回的结果集临时保持到游标结果集中,为了处理结果集的数据,需要使用fetch语句提取游标数据,在oracle9i之前,使用fetch语句每次只能提取一行数据,从oracle9i开始,通过使用fetch..bulk collect into语句,每次可以提取多行数据,语法如下:
语法一:fetch cursor_name into variable1,variable2,....;
语法二:fetch cursor_name bulk collect into collect1,collect2,..[limit rows];
如上所示:variable用于指定接收游标数据的变量;collect用于指定接收游标结果的集合变量, 注意,当使用语法一时,必须要使用循环语句处理结果集的所有数据。
(4)、关闭游标
在提取并处理结果集的所有数据之后,就可以关闭游标并释放器结果集了,语法如下:
close cursor_name;
2、显示游标属性
显示游标属性用于返回显示游标的执行信息,这些属性包括%isopen,%found,%notfond和%rowcount,当使用游标时,必须要在显示游标属性之前带有显示游标名作为前缀(游标名属性名)。
(1)、%isopen
该属性用于确定游标是否打开,如果游标已经打开,则返回值为true,如果游标没有打开,则返回值为false,示例如下:
if cl%isopen then ----如果游标打开,则执行相应操作。 ...... else -----如果游标未打开,则打开游标 open cl; end if;
(2)、%found
该属性用于检查是否从结果集中提取到了数据,如果提取到了数据,则返回值为true,如果未提取到数据,则返回值为false,示例如下:
loop fetch cl into var1,var2,; -------提取数据到变量中 if cl%found then -----------如果提取到数据,则进行相应操作 ......; else ---------如果没有提取到数据,则退出循环 exit; end if; end loop;
(3)、%notfound
该属性与%found属性恰好相反,如果提到数据,则返回false,如果没有提取到数据,则返回true。示例如下:
loop fetch cl into var1,var2; if cl%notfound then 。。。。。。。。; else exit; end if; end loop;
(4)、%rowcount
该属性用于返回到当前行为止,已经提取到得实际行数,示例如下:
loop fetch cl into var1,var2; if cl%rowcount>0 then ...... end if; end loop;
3、显示游标示例
(1)、在显示游标时使用fetch...into语句
在oracle9i之前使用fetch..into语句,每次只能处理一行数据,为了处理结果集中的多行数据,必须要使用循环语句进行处理,示例如下:
declare cursor cursor_temp IS select name,age,address,id from cip_temps where id=10; v_name cip_temps.name%TYPE; v_age cip_temps.age%TYPE; v_address cip_temps.address%TYPE; v_id cip_temps.id%TYPE; begin open cursor_temp; loop fetch cursor_temp into v_name,v_age,v_address,v_id; exit when cursor_temp%notfound; dbms_output.put_line(v_name ||':'|| v_age ||':'|| v_address||':'|| v_id); end loop; close cursor_temp; end;
(2)、在显示游标中,使用fetch..bulk collect into 语句提取所有数据
从oracle9i开始,通过使用fetch..bulk collect into 语句,一次就可以提取结果集的所有数据,示例如下:
declare cursor temp_cursor is select * from cip_temps where id=1; type temp_table_type is table of cip_temps%rowtype; temp_table temp_table_type; begin open temp_cursor; fetch temp_cursor bulk collect into temp_table; for i in 1..temp_table.count loop dbms_output.put_line(temp_table(i).name||':'||temp_table(i).age||':'||temp_table(i).address||':'||temp_table(i).id); end loop; close temp_cursor; end;
(3)、在显示游标中,使用fetch..bulk collect into..limit 语句提取部分数据
当使用fetch..bulk collect into子句提取数据时,默认情况下会提取结果集中的全部数据,如果结果集的数据含有大量数据,并且使用array集合变量接收数据,那么可能需要限制每次提取的行数,示例如下:
declare type temp_array_type is array(5) of cip_temps%rowtype; temp_array temp_array_type; cursor temp_cursor is select * from cip_temps; rows int:=5; v_count int:=0; begin open temp_cursor; loop fetch temp_cursor bulk collect into temp_array limit rows; dbms_output.put_line('message:'); for i in 1..(temp_cursor%rowcount-v_count) loop dbms_output.put_line(temp_array(i).name||':'||temp_array(i).age||':'||temp_array(i).address||':'||temp_array(i).id); end loop; v_count:=temp_cursor%rowcount; exit when temp_cursor%notfound; end loop; close temp_cursor; end;
(4)、使用游标属性
为了显示游标的执行信息,需要使用显示游标的属性,下面以显示游标属性%isopen和%rowcount为例:
declare type name_table_type is table of cip_temps.name%type index by binary_integer; name_table name_table_type; cursor temp_cursor is select name from cip_temps; begin if not temp_cursor%isopen then open temp_cursor; end if; fetch temp_cursor bulk collect into name_table; dbms_output.put_line(temp_cursor%rowcount); close temp_cursor; end;
发表评论
-
oracle 异常处理
2010-06-02 19:01 17671、异常的优点 如果没有异常,在程序中,应当检查每个 ... -
oracle 行触发与语句触发
2010-05-25 12:49 1019oracle 行触发与语句触发的区别 1、行触发器有 f ... -
oracle 系统表
2010-05-21 12:28 778数据字典dict总是属于Oracle用户sys的。 1、 ... -
EXECUTE IMMEDIATE 执行sql语句
2010-05-21 10:54 3235在ORACLE的PL/SQL里:EXECUTE IMMEDIA ... -
Oracle正则表达式
2010-05-20 16:26 1278oracle的正则表达式(regular expression ... -
oracle 数组
2010-05-20 16:18 1062--固定数组 declare type type_ar ... -
Oracle 存储过程传入二维数组
2010-05-20 15:58 3624Oracle 存储过程传入二维数组 使用Ora ... -
存储过程操作同义词
2010-05-18 11:39 1453A用户ab01 表,B用户通过同义词访问A用户的ab01表 ... -
用Bulk Collect提高查询效率
2010-05-05 16:38 1187Oracle8i中首次引入了Bulk Collect特性, ... -
oracle 统计分组语句
2010-04-22 17:32 2074在应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时 ... -
oracle 控制语句
2010-04-22 17:29 1170一、条件分支语句 条件分支语句用于依据特定的情况选择要执行的操 ... -
oracle 存储过程语法
2010-04-22 17:26 3238子程序是指被命名的PL/SQL块,这些块可以带有参数,可以在不 ... -
oracle 函数
2010-04-22 17:23 1396一、开发函数 函数用于返回特定数据,如果在应用程序中经常需要返 ... -
oracle 触发器
2010-04-22 17:19 4344触发器是指存放在数据库中,并被隐藏执行的存储过程。在Orac ... -
oracle 复合数据类型(pl/sql记录)
2010-04-22 17:16 1996为了简化单行多列数据的处理,可以使用PL/SQL记录;为了保留 ... -
oracle 复合数据类型(批量绑定)2
2010-04-22 17:12 1535一、PL/SQL集合 为了处理单列多行,可以使用PL/ ... -
oracle 复合数据类型(批量绑定)
2010-04-22 17:07 1198批量绑定是oracle9i新增加特性,是指执行单次SQL操作能 ... -
Oracle SQL语句(连接查询)
2010-04-22 16:02 3339一、内连接和外连接 内连接用于返回满足连接条件的记录;而 ... -
关于dbms_sql的使用
2010-03-29 16:31 792关于dbms_sql的使用 PL/SQL ... -
使用Oracle的DBMS_SQL包执行动态SQL语句
2010-03-29 11:29 2526DECLARE v_cursor NUMBER ...
相关推荐
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库...在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。
本篇文章给大家介绍oracle显示游标的使用及游标for循环,当查询返回单行记录时使用隐式游标,查询返回多行记录并逐行进行处理时使用显式游标,对本文感兴趣的朋友一起学习吧
1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on...
关于游标使用问题的练习附答案。游标分隐式和显示游标;动态和ref游标。。。
关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。
主要描述oracle中游标的学习隐式游标和显示游标
Oracle游标分为显示游标和隐式游标。 显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/...
Oracle之显示游标的使用方法.pdf 学习资料 复习资料 教学资源
什么是游标?游标有什么作用?Oracle游标的类型?Oracle游标的状态有哪些,怎么使用游标属性?如何使用显示游标,?如何遍历循环游标?
1. oracle中的游标分为显示游标和隐式游标 2. 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条...
oracle游标管理:显示游标,隐式游标,REF游标
介绍oracle 中使用游标 游标在存储过程中的应用 (输入、输出参数) 例:通过输入部门号,查询某部门员工的姓名和工作。 (用输入参数和输出参数 LOOP循环)
存储过程调用 Function 并使用 游标循环得到每一条数据然后更新本条数据。初学代码写的不是很好,希望能给初学存储过程的兄弟们提供一点借鉴哦。
有关显示游标,隐式游标,动态游标的,如果没基础的话,可以参考这个看看哦
Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。 操作步骤: 声明游标 ...
oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;
显示游标 隐式游标 第9章-视图,数据库中虚拟的表 什么是视图 视图的创建 操作视图数据的限制 视图的修改 视图的删除 第10章-存储过程,提高程序执行的效率 什么是存储过程 在SQL*Plus中创建存储过程 ...
文章目录游标1.1 显式游标1.1.1 创建游标1.1.2 打开游标...显示游标由用户创建并管理 select * from v$open_cursor查看当前会话游标 详情参考oracle中cursor与refcursor及sys_refcursor的区别 1.1 显式游标 1.1.1 创
内容简介 《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle...15.6.1 今日新闻的显示 15.6.2 查找新闻 15.6.3 查看新闻人物和投票 15.7 本章小结