--=============cursor:在pl/sql中用来 处理多行多列(包括0行) 的记录数据===================== -- Cursor: oracle使用专有的sql 工作区(private sql workparea)来执行sql语句,存储信息.这个工作区称之为cursor --oracle每执行每一个sql语句都有唯一的cursor与之对应. --2.游标的分类 ----显示游标:即用户自定义游标,专门用于处理select语句返回的多行数据 ----隐式游标:系统自动定义的游标,记录集只有单行数据,用于处理select into 和DML语句 --3.游标使用的一般过程: ----显式游标:声明(declare), 打开(open,执行sql语句,产生结果集), 读取(fetch,提取结果集中记录), 关闭(close) ------显示cursor的属性: ------属性 类型 描述 ------%isopen boolean open--> true ------%notfound boolean 前一个fetch没有返回一行记录-->true ------%found boolean 前一个fetch返回一行记录-->true,同%notfound相反. ------%rowcount number 到目前为止 cursor已提取的总行数 ----隐式游标:直接使用读取,声明、打开、关闭都是系统自动进行的 ------隐式cursor的属性: ------ 属性 类型 描述 ------SQL%isopen boolean dml执行为true,结束后false; ------SQL%notfound boolean sql%found属性返回值相反 ------SQL%found boolean dml操作成功 true ------SQL%rowcount number dml执行成功的数据行数 --======显式游标============================================ ---=============================================================================== declare --声明游标: Cursor is select xxx ; 在没有open之前 不会执行该select语句 Cursor c_emp is select * from emp where deptno = 10 or deptno = 20; v_emp emp%rowtype; --声明变量,用来接收从cursor中的取出的每一条数据 begin open c_emp; --打开cursor ,开始执行select 语句 loop --循环读取cursor结果 fetch c_emp into v_emp; --从结果集中取数据到v_emp变量,并移动指向数据的指针 if c_emp%FOUND --如果上一个fetch找到记录 就返回true . then dbms_output.put_line(v_emp.ename); else EXIT; end if; end loop; close c_emp; --关闭close,释放资源 end; --2.record类型 + while处理cursor declare -- 定义record类型 type r_emp_rec is record( eid emp.empno%type, name emp.ename%type ); Cursor c_emp_cursor is select empno , ename from emp where empno = 7900; v_emp r_emp_rec;--声明 v_emp 记录类型的变量 begin open c_emp_cursor; --必须先fetch,c_emp_cursor%found的值才会是true或false, - --若不fetch, c_emp_cursor%found的值为null fetch c_emp_cursor into v_emp; --通过循环处理结果集中的数据,若c_emp_cursor%Found的值为false,循环结束 while c_emp_cursor%FOUND LOOP dbms_output.put_line(v_emp.name); fetch c_emp_cursor into v_emp; --再次fetch end loop; close c_emp_cursor; end; / -- 3 . record类型 + for处理cursor +游标参数 -- ----For循环对cursor的处理进行了集成, ------ 不需要open、循环处理fetch、close。cursor中的数据通过for循环中的记录类型的变量emp执行引用。 declare -- type t_emp_rec is record( -- salary emp.sal%type, name emp.ename%type -- ); -- v_emp t_emp_rec; Cursor c_emp(emp_id number) is -- emp_id是参数 select sal , ename from emp where empno = emp_id; begin for emp in c_emp(7900) LOOP dbms_output.put_line(emp.ename); end LOOP; end ; / --===========总结============== --cursor的声明 ----1.在游标声明中使用标准的select 语句 ----2.查询中可以用order by来处理次序问题。 ----3.可以在查询中引用变量,但必须在cursor语句之前声明这些变量. Cursor c_emp_id(emp_id number) is select id from service where cost_id = emp_id; --open cursor ----通过open cursor来执行select语句 并标识结果集. ----select语句没有记录返回 不会出现异常. ----open cursor emp_id(5); --fech cursor. ----1.检查当前行 ,把值赋给变量.变量可以是record类型或者标量类型 ----2. fetch cursorName into 变量1,变量2 | record_name ; --cursor结果集处理 ----1.使用loop处理cursor. ----2.每次fetch一行,反复进行. ----3.使用%notfound属性检测一次不成功的提取操作 ----4.使用显示cursor的属性检测提取是否成功,避免死循环. --关闭cursor ----1.最后一条记录,应该关闭cursor.(有需要,可以再次open) ----2,cursor一旦关闭,所有和当前cursor相关的资源都会释放,不能从关闭的 cursor中fetch数据. ----3.对任何关闭的cursor的操作都会invalid_cursor错误。 ----4.每个session打开的cursor数量由open_cursor参数决定 --===========练习================= -- 打印每个员工的ename , id ,不存在则打印not exists; declare Cursor c_emp is --select * from emp where 1 = 2; -- 模拟没有查询到记录 select * from emp where 1 = 1; v_emp emp%rowtype; begin open c_emp; fetch c_emp into v_emp; if c_emp%FOUND then while c_emp%FOUND LOOP dbms_output.put_line(v_emp.ename ||'--------------'|| v_emp.deptno); fetch c_emp into v_emp; exit when c_emp%NOTFOUND; end loop; else dbms_output.put_line('not exists'); end if; close c_emp; end; /
相关推荐
Oracle数据库实验-PLSQL游标、过程、函数、包的使用[文].pdf
oracle数据库里plsql游标、集合及对象的简单使用,适合初学者查看
大量源码案例,手把手教你PLSQL数据库开发。内容预览: ---- 第一章 PL/SQL 简介 ---- ---- 第二章 PL/SQL程序结构 ---- ---- 第三章 变量与数据类型 ---- ---- 第四章 PL/SQL控制语句 ---- ---- 第五章 PL/SQL游标 ...
相信讲述了游标以及它的一些应用实例,在while,if 和for循环下的代码编写。
oracle数据库ppt 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和异常处理 第8章 存储过程、函数和包 第9章 触发器 第10章 数据库...
1、ORACLE 体系结构 2、sql_plus函数 3、sqlplus常用命令 4、sql 5、锁和表分区 6、数据库对象 7、oop 8、PLSQL 9、游标 10、程和函数 11、触发器 12、导入导出备份 13、如何正确利用rownum来限制查询所返回的行数 ...
这是我学习Oracle时,老师给的讲义,包含了Oracle从入门到高级应用的全部资料。 以下是文件列表 Day01-Oracle基础.pdf Day02-Oracle表的管理.pdf ...Day11-plsql游标和函数.pdf Day12-触发器.pdf Day13-索引.pdf
PLSQL数据库编程 存储过程 游标 等等
主要介绍Oracle数据库开发技术,包括存储过程、函数、游标及plsql的教程。
第15章 使用游标 第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统包 第23章 使用大对象 ...
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...
2 Oracle:plsql,游标 6分 3 Oracle:sql命令 8分 4 Oracle:数据库创建,授权 6分 5 Oracle:plsql块 5分 6 Oracle:过程与函数 6分 7 Oracle:plsql块 6分 8 Oracle:plsql,过程与函数 8分 9 Oracle:建表,组合索引 6分...
第1章 关系数据库与SQL语言环境.ppt 第2章 数据查询.ppt 第3章 数据操作.ppt ...第6章 PLSQL基础.ppt 第7章 游标和异常处理.ppt 第8章 存储过程、函数和包.ppt 第9章 触发器.ppt 第10章 数据库开发应用实例.ppt
oracle教程 里面包含全部的从基础到游标 存储过程 触发器 包 函数的详细的代码,涉及面很全,可以通过修改其实例代码,达到你所需要的效果,里面详细的介绍基础的SQL以后后面比较复杂的PLSQL
里面有orcale plsql经典试题,视图,存储过程,游标,包,异常处理。
pl/sql存储过程,函数,游标,以及存储过程中的基础知识,绝对值得你收藏的经典题目,让你的pl/sql得到最大的锻炼。让你的数据库逻辑更加灵活。
嘉兴IBM培训Oracle课件 ...ORACLE04数据库对象 ORACLE05PLSQL编程基础 ORACLE06游标 ORACLE07记录类型与PLSQL表 ORACLE08过程与函数 ORACLE09触发器 ORACLE10包 ORACLE11对象类型 ORACLE12可变数组和嵌套表
第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g ...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 ...§8.5 数据库触发器的应用举例 13