--=============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游标、集合及对象的简单使用,适合初学者查看
Oracle数据库是世界上最流行的数据库管理系统之一,它支持一种强大的编程语言——PL/SQL,用于处理数据库中的数据。在本次实验中,我们将重点探讨PL/SQL中的游标、过程、函数和包的使用,这些都是数据库开发中不可或...
### Oracle数据库的游标学习总结 #### 一、引言 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。通过游标,我们可以逐行地读取查询结果,这对于复杂的业务逻辑处理非常有用。本文将详细介绍Oracle...
Oracle PL/SQL 游标的学习 游标是 Oracle PL/SQL 中的一个重要概念,它允许用户访问和操作结果集中的数据。游标可以理解为是一个映射在结果集中的一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一...
通过深入学习和实践这些内容,开发者能够熟练掌握在Oracle数据库中使用PLSQL进行编程,并能有效地创建和管理存储过程,以提高数据库应用的效率和质量。在实际工作中,了解这些知识点对于数据库管理和开发工作至关...
"Oracle数据库练习PPT"可能包含一系列关于Oracle数据库管理、表的创建、索引、视图、触发器、存储过程、游标以及数据库安全等内容的教程。通过这些PPT,初学者可以了解到如何设计和操作Oracle数据库,包括数据类型、...
PLSQL(Procedural Language/Structured Query Language)是Oracle数据库为SQL添加的程序设计语言,它结合了SQL的查询功能和过程性编程语言的特点,使得开发者可以编写更复杂的数据库操作程序。游标(Cursor)是...
PL/SQL(程序化SQL)是一种专门为Oracle数据库设计的过程化语言。它结合了SQL的数据操纵功能和过程化编程语言的控制结构,使得开发者能够编写复杂的应用逻辑。游标是PL/SQL中用于处理查询结果集的一种机制。本文将...
每当我们执行一条不与显式声明的游标相关的SQL语句时,Oracle服务器会隐式地打开一个游标,用于处理该语句并存储过程信息。 与隐式游标相对的是显式游标。显式游标需要程序员显式声明并进行管理。在PL/SQL中,当...
PL/SQL是Oracle数据库系统提供的扩展SQL语言,用于在各种环境下对Oracle数据库进行访问。 一、PL/SQL语言简介 PL/SQL是Procedure Language/Structured Query Language的缩写,它是Oracle数据库系统提供的一种程序...
大量源码案例,手把手教你PLSQL数据库开发。内容预览: ---- 第一章 PL/SQL 简介 ---- ---- 第二章 PL/SQL程序结构 ---- ---- 第三章 变量与数据类型 ---- ---- 第四章 PL/SQL控制语句 ---- ---- 第五章 PL/SQL游标 ...
12. **数据库链接(DB Links)**:通过DB Links,可以在不同的Oracle数据库之间执行远程SQL和PLSQL,实现数据的跨库操作。 13. **PL/SQL内置函数**:Oracle提供大量内置函数,如数学函数、字符串函数、日期时间函数...
Oracle数据库中的PL/SQL(Procedural Language/Structured Query Language)是一种强大的编程语言,它将SQL的查询功能与过程式编程语言的控制结构相结合,为数据库管理提供了更高级别的抽象和控制。PL/SQL是Oracle...
Oracle 10g PLSQL编程是数据库管理员和开发人员必须掌握的关键技能之一。PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一个编程语言,它结合了SQL的强大查询能力与过程编程的灵活性...
Oracle PL/SQL是一种专为Oracle数据库设计的过程化编程语言,它是SQL的扩展,增加了更强大的控制结构和数据处理能力,适合处理复杂的业务逻辑。本文档是针对Oracle初学者的PL/SQL基础教程。 PL/SQL的基本结构是块...
Oracle PLSQL,全称为“Procedural Language/Structured Query Language”,是Oracle数据库系统中的一个强大编程语言,它结合了SQL的查询能力与过程性编程语言的功能。本资料《Oracle PLSQL 从入门到精通》旨在帮助...
Oracle数据库是全球广泛使用的数据库管理系统之一,而PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库专有的编程语言,它结合了SQL的查询功能和传统的过程式编程语言的特点,使得数据库管理...
在本文中,我们将深入探讨如何使用Microsoft Visual C++ 6.0(简称VC6)来访问Oracle数据库。VC6是一款经典的C++集成开发环境,它提供了丰富的功能和灵活性,允许开发者构建高性能的应用程序。Oracle数据库则是一种...