- 浏览: 98075 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
鸟气凌人:
最经正在看基础
Oracle PL/SQL中游标和游标变量的使用 -
matraxa:
讲得很清楚,顶一个!
JVM垃圾回收机制总结(1) —基本概念 -
ZavaKid:
顶楼主,通俗易懂。
byw,上面的图用什么软件画的?
JVM垃圾回收机制总结(1) —基本概念 -
47478220:
对这里还不太了解,学习了。
Java 虚拟机体系结构
1.什么是游标
游标(Cursor)是一个指向上下文去的句柄(handle)或指针。
游标可分为显示游标&隐示游标两种。
2.显示游标
显示游标用来处理多于一行的SELECT语句。
2.2显示游标的处理包括4歌PL/SQL步骤,如下:
1)声明游标。
2)为查询打开游标。
3)将结果提取(fetch)到PL/SQL变量中。
4)关闭游标。
下面是一个关于显示游标处理的完整事例:
================================================================
DECLARE
v_Pet_id occupancy.pet_id%TYPE;
/*声明游标*/
CURSOR occupancy_cur IS
SELECT pet_id, room_number
FROM occupancy WHERE pet_id = v_Pet_id;
occupancy_rec occupancy_cur%ROWTYPE;
BEGIN
v_Pet_id := 22;
/*为查询打开游标*/
OPEN occupancy_cur;
LOOP
/*将结果提取(fetch)到PL/SQL变量中*/
FETCH occupancy_cur INTO occupancy_rec;
/*如果前面FETCH没有返回一个行,那么occupancy_cur%NOTFOUND
就会返回一个True,从而跳出当前的循环*/
EXIT WHEN occupancy_cur%NOTFOUND;
update_bill
(occupancy_rec.pet_id, occupancy_rec.room_number);
END LOOP;
/*关闭游标*/
CLOSE occupancy_cur;
END;
=================================================================
另外,游标也可以这样声明:
================================================================
DECLARE
/*声明游标*/
CURSOR occupancy_cur(p_Pet_id occupancy.pet_id%TYPE) IS
SELECT pet_id, room_number
FROM occupancy WHERE pet_id = v_Pet_id;
occupancy_rec occupancy_cur%ROWTYPE;
BEGIN
/*为查询打开游标*/
OPEN occupancy_cur(22);
LOOP
/*将结果提取(fetch)到PL/SQL变量中*/
FETCH occupancy_cur INTO occupancy_rec;
/*如果前面FETCH没有返回一个行,那么occupancy_cur%NOTFOUND
就会返回一个True,从而跳出当前的循环*/
EXIT WHEN occupancy_cur%NOTFOUND;
update_bill
(occupancy_rec.pet_id, occupancy_rec.room_number);
END LOOP;
/*关闭游标*/
CLOSE occupancy_cur;
END;
=================================================================
3.隐式游标
隐式游标用于处理INSERT、UPDATE、DELETE&单行的SELECT..INTO语句。
隐式游标是指向处理所有的SQL语句的环境区域的指针,隐式游标也叫SQL游标。与显式游标
不同的是,SQL游标不能通过专门的命令打开火关闭。PL/SQL隐式地打开SQL游标,并在它内部处
理SQL语句,然后关闭它。
下面具体介绍SQL游标的属性:
1)%FOUND
当使用Insert,Delete或Update语句处理一行或多行,或执行SELECT INTO语句返回一行时
,%FOUND返回TRUE,否则返回FALSE。
注意,如果执行SELECT INTO语句时返回多行,则会产生TOO_MANY_ROWS异常,并将控制权转
到异常处理部分,%FOUND属性并不返回TRUE。如果执行SELECT INTO语句时返回0行,会产生
NO_DATA_FOUND异常,%FOUND属性并不返回FALSE。
2)%NOTFOUND与%FOUND属性相反,当使用INSERT、DELETE或UPDATE语句处理的行数为0时,%
NOTFOUND属性返回TRUE,否则返回FALSE。例:
=======================================================
BEGIN
UPDATE auths
SET entry_date_time = SYSDATE
WHERE author_cod = 'A00017';
IF SQL%NOTFOUND THEN
INSERT INTO auths(author_code, name, sex, birthdate,salary, entry_date_time)
VALUES ('A00017','Tom', 1, '30-APR-40',98.5,SYSDATE);
END IF;
END;
=======================================================
3)%ISOPEN
因为在执行了DML语句后,ORacle会自动关闭SQL游标,所以SQL游标的%ISOPEN总为FALSE。
4)%ROWCOUNT
该属性返回执行INSERT、DELETE或UPDATE语句返回的行数,或返回执行SELECT INTO语句时查询
出的行数。如果INSERT、DELETE、UPDATE或SELECT语句返回的行数为0,则%ROWCOUNT属性返回0
。但如果SELECT INTO语句返回的行数为多航,则产生TOO_MANY_ROWS异常,并将控制权转到异常
处理部分,而不是去判断%ROWCOUNT属性。 例:
=======================================================
BEGIN
UPDATE auths
SET entry_date_time = SYSDATE
WHERE author_cod = 'A00017';
IF SQL%ROWCOUNT=0 THEN
INSERT INTO auths(author_code, name, sex, birthdate,salary, entry_date_time)
VALUES ('A00017','Tom', 1, '30-APR-40',98.5,SYSDATE);
END IF;
END;
=======================================================
4.游标变量
到目前为止前面所有显式游标的例子都式静态游标--即游标于一个SQL语句关联,并且该
SQL语句在编译时已经确定。游标变量式一个引用类型(REF)的变量,它与C或Pascal中的指针类
似。当程序运行时使用游标变量可以指定不同的查询,所以游标变量的使用比静态游标更灵活。
下面是一个游标变量的例子:
=======================================================
DECLARE
/*定义一个游标变量*/
TYPE t_CurRef IS REF CURSOR;
/*声明一个游标变量类型的变量*/
c_CursorRef t_curref;
/*定义PL/SQL记录类型t_AuthorRec,该类型的变量用来接收游标变量的返回值*/
TYPE t_AuthorRec IS RECORD(
AuthorCode auths.author_code%TYPE,
Name auths.name%TYPE);
/*定义PL/SQL记录类型t_ArticleRec,该类型的变量也用来接受游标变量的返回值*/
TYPE t_ArticleRec IS RECORD(
AuthorCode auths.author_code%TYPE,
Title auths.title%TYPE);
/*声明两个记录类型变量*/
v_Author t_AuthorRec;
v_Article t_ArticleRec;
BEGIN
--打开游标变量c_CursorRef,返回t_AuthorRec;
OPEN c_CursorRef FOR
SELECT author_code, name FROM auths
WHERE author_code IN ('A0001','A0002','A0003','A0004','A0005');
--推进游标变量
FETCH c_CursorRef INTO v_Author ;
--游标变量的推进循环
WHILE c_CursorRef%FOUND LOOP
--将作家代码&相应的作家名字输出到屏幕上。
DBMS_OUTPUT.PUT(v_Author.AuthorCode||':'||v_Author.Name||' ');
FETCH c_CursorRef INTO v_Author;
END LOOP;
DBMS_OUTPUT.NEW_LINE;
--关闭游标变量,仅仅将游标变量指定的资源释放掉,
--游标变量本身的存储控件没有释放掉。
CLOSE c_CursorRef;
--在此打开游标变量,返回t_ArticleRec类型的记录。
OPEN c_CursorRef FOR
SELECT author_code, title FROM article
WHERE author_code in ('A0001','A0002','A0003','A0004','A0005');
FETCH c_CursorRef INTO v_Article;
WHILE c_CursorRef%FOUND LOOP
--将作家代码&他的文章输出到屏幕上。
DBMS_OUTPUT.PUT(v_Article.AuthorCode||':'||v_Article.Title||' ');
FETCH c_CursorRef INTO v_Article;
END LOOP;
CLOSE c_CursorRef;
END;
=======================================================
发表评论
-
Oracle中函数使用技巧(2) - NULLIF
2013-07-09 01:42 826NULLIF 函数 功能 通过比较表达式提供 ... -
Oracle中函数使用技巧(1) - Decode
2013-07-09 01:38 697ecode()函数是ORACLE PL/SQL是功能强大的函 ... -
Oracle数据库备份与恢复的三种方法
2013-07-09 00:56 661Oracle数据库有三种标准的备份方法,它们分别是导出/导 ... -
Oracle 字符集详解
2013-07-09 00:31 608一、什么是Oracle字符集 Oracle字 ... -
Oracle中逻辑导出Exp/导入Imp详解
2013-07-09 00:27 970导入/导出是O ... -
Oracle触发器详细介绍(二)
2011-08-11 15:46 1349Sql代码 --触发器 trigger ... -
Oracle 游标的使用(二)
2011-08-11 15:44 1238Sql代码 --ref 游标 /* ... -
exp/imp命令详解
2011-06-27 16:45 1176exp/imp两个命令可以说是oracle中最常用的命令了。 ... -
ora-00020超出最大进程数的解决方法
2011-06-23 09:42 1799一般原因是因为你的应用程序的连接数超过了ORACLE系统设 ... -
ORACLE中客户端连接服务器端常见问题与解决
2011-06-23 09:36 1058要排除客户端与服务器 ... -
Oracle 常用数据字典
2011-06-23 09:33 889--Oracle 数据字典 --Oracle 数据字典 ... -
ORACLE函数大全
2011-04-14 16:55 659SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制 ... -
ORACLE面试题及答案
2011-04-14 16:54 14801.解释冷备份和热备份 ... -
Oracle(SQL)优化
2011-04-14 16:47 8141. 选用适合的优化器 Ora ... -
ORACLE AUTOTRACE介绍
2011-04-14 16:46 1061AUTOTRACE是一项 SQL*Plus 功 ... -
Oracle数据字典
2011-04-14 16:44 777oracle数据库系统是一个复杂的软件系统。如果不了解 ... -
Oracle SQL合并查询笔记
2010-11-14 10:45 1111在Oracle sql查询过程当中,可以使用 ... -
Oracle SQL子查询笔记
2010-11-14 00:53 2389子查询是指嵌入在其他SQL语句中的SELECT语 ... -
Oracle 连接查询学习笔记
2010-11-13 20:51 775一、内连接和外连接 内连接用于返回满足连接条件的记录;而 ... -
Oracle 统计分组语句
2010-11-12 17:24 1349在应用系统开发中,进行需要统计数据库中的数据,当执 ...
相关推荐
pl/sql存储过程,函数,游标,以及存储过程中的基础知识,绝对值得你收藏的经典题目,让你的pl/sql得到最大的锻炼。让你的数据库逻辑更加灵活。
讲解oracle中的pl/sql的使用,存储过程,游标,函数,程序包,触发器。等等。
通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...
ORACLE PL/SQL 存储过程 触发器 ORACLE PL/SQL 存储过程 触发器 子程序 游标
1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...
PL/SQL 程序设计 本章主要重点: PL/SQL概述 PL/SQL块结构 PL/SQL流程 运算符和表达式 游标 异常处理 数据库存储过程和函数 包 触发器
通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录...
走进Oracle、认识PL/SQL、数据表的基本操作、表中数据的基本操作、数据的基本查询、查询中函数的使用、数据表的高级查询、索引及视图的使用、数据类型、流程控制、游标、存储过程和函数、触发器、异常处理、事务和锁...
通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...
PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) 控制结构(第4~7章) 异常处理(第8~10章) 游标(第11~12章) 触发器(第13~14章) 复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包...
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些...
包含oracle存储过程的增、删、查、改 %type、%rowtype的使用 自定义函数 PL/SQL块
【实验目的】 1. 熟悉PL/SQL的数据类型和书写规则 2. 熟悉控制结构和游标的使用 3. 编写和运行函数、过程和触发器
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...
PL/SQL,包括函数、包、触发器、异常、游标、子过程等,希望对学习Oracle、PL/SQL的朋友有帮助!
Oracle是一个生产中间件和数据库的较大的生产商,oracle原本的含义:“神谕”,指的是神说的话,中国在商朝时代,把一些刻在龟壳上的文字当成是上天的指示,所以在中国将oracle翻译成”甲骨文”.