- 浏览: 275798 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 18531、异常的优点 如果没有异常,在程序中,应当检查每个 ... -
oracle 行触发与语句触发
2010-05-25 12:49 1067oracle 行触发与语句触发的区别 1、行触发器有 f ... -
oracle 系统表
2010-05-21 12:28 821数据字典dict总是属于Oracle用户sys的。 1、 ... -
EXECUTE IMMEDIATE 执行sql语句
2010-05-21 10:54 3278在ORACLE的PL/SQL里:EXECUTE IMMEDIA ... -
Oracle正则表达式
2010-05-20 16:26 1337oracle的正则表达式(regular expression ... -
oracle 数组
2010-05-20 16:18 1101--固定数组 declare type type_ar ... -
Oracle 存储过程传入二维数组
2010-05-20 15:58 3660Oracle 存储过程传入二维数组 使用Ora ... -
存储过程操作同义词
2010-05-18 11:39 1512A用户ab01 表,B用户通过同义词访问A用户的ab01表 ... -
用Bulk Collect提高查询效率
2010-05-05 16:38 1231Oracle8i中首次引入了Bulk Collect特性, ... -
oracle 统计分组语句
2010-04-22 17:32 2169在应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时 ... -
oracle 控制语句
2010-04-22 17:29 1272一、条件分支语句 条件分支语句用于依据特定的情况选择要执行的操 ... -
oracle 存储过程语法
2010-04-22 17:26 3279子程序是指被命名的PL/SQL块,这些块可以带有参数,可以在不 ... -
oracle 函数
2010-04-22 17:23 1433一、开发函数 函数用于返回特定数据,如果在应用程序中经常需要返 ... -
oracle 触发器
2010-04-22 17:19 4385触发器是指存放在数据库中,并被隐藏执行的存储过程。在Orac ... -
oracle 复合数据类型(pl/sql记录)
2010-04-22 17:16 2041为了简化单行多列数据的处理,可以使用PL/SQL记录;为了保留 ... -
oracle 复合数据类型(批量绑定)2
2010-04-22 17:12 1622一、PL/SQL集合 为了处理单列多行,可以使用PL/ ... -
oracle 复合数据类型(批量绑定)
2010-04-22 17:07 1278批量绑定是oracle9i新增加特性,是指执行单次SQL操作能 ... -
Oracle SQL语句(连接查询)
2010-04-22 16:02 3392一、内连接和外连接 内连接用于返回满足连接条件的记录;而 ... -
关于dbms_sql的使用
2010-03-29 16:31 891关于dbms_sql的使用 PL/SQL ... -
使用Oracle的DBMS_SQL包执行动态SQL语句
2010-03-29 11:29 2569DECLARE v_cursor NUMBER ...
相关推荐
游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行循环处理,以实现更复杂的数据操作需求。 #### 二、隐式游标 隐式游标是在执行DML(数据操纵语言)操作或单行`SELECT INTO`语句时由...
如果游标已打开,可以显示提示信息并关闭游标;否则,打开游标并执行查询。 7. **使用ROWCOUNT属性**: 示例5中,`%ROWCOUNT`属性被用来检查游标处理的行数。当`FETCH`或`UPDATE`操作完成后,可以通过`%ROWCOUNT`...
1. 显示游标:显示游标是使用 cursor...is 语句定义的游标。 2. 隐式游标:隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由 PL/SQL 自动定义的。 四、游标...
1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on...
Oracle数据库中的游标是处理查询结果集的一种机制,尤其在需要对多行数据进行逐行操作时显得尤为重要。游标分为隐式游标和显式游标,它们各自有不同的应用场景。 1. **隐式游标**:Oracle在每次SQL语句执行时都会...
关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。
静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式游标是所有 DML 语句为隐式游标,可以通过隐式游标属性获取 SQL 语句信息。显示游标是用户显示声明的游标,即指定结果集。当...
游标 for 循环是显示游标的一种快捷使用方式,它使用 for 循环依次读取结果集中的行数据,当 form 循环开始时,游标自动打开,每循环一次系统自动读取游标当前行的数据,当退出 for 循环时,游标被自动关闭。...
Oracle 游标是PL/SQL编程中不可或缺的一部分,它们允许程序员逐行处理查询结果,而不仅仅是获取单一数据点。在Oracle数据库中,游标主要用于在循环或其他控制结构中操作多行数据,使得处理复杂的数据操作变得更为...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
Oracle游标分为显示游标和隐式游标。 显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/...
Oracle 游标是数据库编程中处理查询结果集的重要工具,特别是在PL/SQL环境中。游标允许程序员逐行处理数据,而不是一次性加载整个结果集。在Oracle中,游标分为隐式游标和显式游标。本文主要关注的是显式游标,其...
Oracle游标主要分为两大类:显示游标和隐式游标。其中,显示游标又可以根据定义方式的不同细分为静态游标和动态游标。 ##### 显示游标 显示游标主要用于处理SELECT语句的结果集。当定义游标时,需要明确指定SQL...
Oracle 游标是一种数据库编程工具,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。在Oracle中,游标尤其适用于处理大量数据,或者需要根据当前数据行进行决策的情况。游标通常与存储过程结合使用...
oracle游标管理:显示游标,隐式游标,REF游标
Oracle游标是数据库管理系统中非常重要的一个概念,它在处理大量数据时提供了高效且灵活的控制方式。在Oracle中,游标(Cursor)允许我们逐行处理查询结果集,而不是一次性加载所有数据,这对于处理复杂的数据操作...
Oracle游标溢出调优是数据库性能优化的重要环节,尤其对于处理大量并发查询或复杂业务逻辑的应用来说。游标管理是Oracle数据库管理SQL语句的关键部分,它涉及到内存分配、缓存策略以及解析效率。以下将详细介绍游标...