使用游标
1)显示游标:
CURSOR name_cursor IS select statement;
2)打开游标:
OPEN name_cursor;
3)提取游标
FETCH name_cursor INTO variable1,variable2.............
4)关闭游标
CLOSE name_cursor;
显示游标的属性:
%ISOPEN:显示游标是否打开
%FOUND:是否从结果集中取到数据
%NOTFOUND:是否未从结果集中取到数据
%ROWCOUNT:已经取到的数据,不是说集合中间有多少数据,请这里注意;
DECLARE
CURSOR a_cursor IS SELECT id,name from test1;
v_id test1.id%TYPE;
v_name test1.name%TYPE;
BEGIN
OPEN a_cursor;
FETCH a_cursor INTO v_id,v_name;
dbms_output.put_line(v_id);
dbms_output.put_line(v_name);
CLOSE a_cursor;
END;
使用游标更新或者删除数据:
如果想通过游标更新或者删除数据的话,那么在定义游标的时候必须指定 FOR UPDATE
如下:
CURSOR my_cursor IS SELECT * FROM test1 FOR UPDATE;
UPDATE table_name SET column=xx WHERE CURRENT OF name_cursor;
DELETE table_name WHERE CURRENT OF name_cursor;
必须指定WHERE CURRENT OF name_current;
使用例外:
EXCEPTION
WHEN e_name1 or e_name2 THEN
statement1;
WHEN 2_name3 THEN
statement2;
ELSE
statement3;
WHEN OTHERS THEN
statement4;
其中自定义异常是这样的:
DECLARE
e_name EXCEPTION;
BEGIN
RAISE e_name;
EXCEPTION
WHEN e_name THEN
dbms_output.put_line('异常抛出');
END;
使用复合数据:
TYPE my_record_type IS RECORD
DECLARE
TYPE my_record_type IS RECORD(
id test1.id%TYPE,
name test1.name%TYPE
);
r1 my_record_type;
BEGIN
SELECT id,name INTO r1 FROM test1 WHERE id=1;
dbms_output.put_line(r1.id || r1.name);
END;
DECLARE
TYPE my_record_type IS RECORD(
id test1.id%TYPE,
name test1.name%TYPE
);
r1 test1%ROWTYPE;
BEGIN
SELECT * INTO r1 FROM test1 WHERE id=1;
dbms_output.put_line(r1.id || r1.name);
END;
/
使用PL/SQl表:
DECLARE
TYPE my_table_type IS TABLE OF NUMBER(2,0)
INDEX BY BINARY_INTEGER;
name_table my_table_type;
BEGIN
select id BULK COLLECT INTO name_table from test1;
dbms_output.put_line(name_table(1));
End;
使用PL/SQL记录表:
DECLARE
TYPE my_table_type IS TABLE OF test1%ROWTYPE
INDEX BY BINARY_INTEGER;
name_table my_table_type;
BEGIN
select * BULK COLLECT INTO name_table from test1;
dbms_output.put_line(name_table(1).name);
End;
DECLARE
TYPE my_table_type IS TABLE OF test1%ROWTYPE
INDEX BY BINARY_INTEGER;
name_table my_table_type;
BEGIN
select * BULK COLLECT INTO name_table from test1; --count可以得到这个表的长度
FOR i in 1..name_table.count LOOP
dbms_output.put_line(name_table(i).name);
END LOOP;
End;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/turkeyzhou/archive/2008/05/14/2443676.aspx
分享到:
相关推荐
PL/SQL学习总结是本人学习ORACLE报表开发及FROM开发的总结,包括存储程序及,包等
初学者的经典范例,各种试题和例题,有答案,重新总结的
这是我在学习PL/SQL中总结的一些东西,希望对他家有帮助.
一个很好的学习 pl/sql的入门文章 作者总结的非常好 非常适合入门学者
富士康MIS 资深人员总结的Oracle PL/Sql 性能优化心得 给新进员工学习之文档 <br>绝对精华 写出专业的Sql
自己总结的,适合于初学者,下载后打印即可使用。
专门抽取数据库中比较难懂的过程语言pl/sql总结了一下
pl/sql知识点总结,以及一些在开发中经常烦的小毛病
ORACLE 学习文档,总结,囊括常用过程,函数,游标,异常处理。。。,非常实用
这是本人在实践中收集总结的,有存储过程、序列、游标、触发器、索引及其它一些常用的语句(如日期、over partion by具体使用包括一些例子),还有两本高清这方面的书,一起放在里面,方便大家学习。
此文档由个人总结快速学习pl/sql的案例及说明,也是快速查询pl、sql开发的精华文档,在此提供给大家学习与查阅
数据库资料,PL/SQL,数据库全解,平时问题总结,经典查找总结
对于pl/sql的语法的详细说明和总结 其中给出一些的例子来说明兑语法的使用
平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。 1、当需要向表中装载大量的数据流或者需要处理大量的数据流的时候,能否使用管道提高处理效率? 管道函数对于改善并行...
这是一篇关于oracle开发入门详细文档,是我自己开发总结出来的。还包括各种开发的最佳实践,喜欢对各位想学oracle pl/sql开发的人有所帮助。
之所以不怕麻烦把有关PL/SQL的知识写下来,一方面,是为了加深理解,便于以后随时翻阅,另一方面,是因为自己看书总是不能从头看到尾,仔仔细细,喜欢跳跃式阅读,导致学习过程中,容易有遗漏。所以,将学习到的知识...
oracle pl/sql也是在别人帮助下完成配置。 这次电脑重装后,自己搞定总结了下怎么配置。 1.下载Oracle 客户端。 安装的版本是win64_11gR2_client.zip,587 MB。 链接地址在官网比较难找。在官网下载还需要...
实施过程中,经常会使用 PL/SQL Developer 工具进行数据转换和处理业务数据。通过性能 优化来提高程序执行效率是必须掌握的一份技能。性能问题中绝大部分都是由于程序编写的 不合理、不规范造成的。本文档阐述了程序...
平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。 1、当需要向表中装载大量的数据流或者需要处理大量的数据流的时候,能否使用管道提高处理效率? 管道函数对于改善...
走进Oracle 1. Oracle简介 2. Oracle安装 3. Oracle客户端工具 4. Oracle服务 5. Oracle启动和关闭 6. Oracle用户和权限 ...3. PL/SQL数据类型 4. PL/SQL条件控制和循环控制 5. PL/SQL中动态执行SQL语句 ....