Oracle 学习笔记 16 -- 游标(PL/SQL)

在PL/SQL程序中,对于处理多行记录的事务经常使用游标来实现。当执行查询语句或者数据操纵语句是,一般可能会产生或者处理一组记录。游标是为了处理这些记录而分配的一段内存区。

游标分为:显示游标和隐示游标。当记录集中只有单行数据时,系统自动的进行定义右边,称为隐示游标。记录集中含有多行数据时,需要用户自己定义游标,称为显示游标。下面分别进行介绍。

显示游标

显示游标的处理需四个使用步骤:

1.定义游标:

就是定义一个游标名,以及与其对应的select 语句。

格式:

CURSOR cursor_name is select_statement 。

2.打开游标:

游标定义之后,要使用游标中的数据,就要打开游标。使用OPEN打开游标。游标只能打开一次。

格式:

OPEN cursor_name 。

3.提取游标数据:

检索游标结果集中的数据,放入指定的变量之中。

格式:

FETCH cursor_name INTO variable_name 。

4.关闭游标:

游标使用完成之后,应该及时的关闭游标,将系统资源释放。

格式:

CLOSE cursor_name 。

游标属性

%found :布尔型,判断最近一次执行fetch语句后,是否从缓冲区中提取到数据,如果提取到数据,返回TURE,否则返回false。

%notfound:布尔型,与%found相反,没有提取到数据返回true,否则返回false。

%ISOPEN :布尔型,当游标打开的时候返回true。

%ROWCOUNT:数字型,放回已从游标中读取的记录数。

例:使用游标数据10号部门的员工工资。

declare

--定义变量

v_sal emp.sal%type ;

--定义游标

cursor emp_sal_cursor is select sal from emp where deptno = 10 ;

begin

--打开游标

open emp_sal_cursor ;

--提起游标信息

fetch emp_sal_cursor into v_sal ;

while emp_sal_cursor%found loop

dbms_output.put_line(v_sal);

fetch emp_sal_cursor into v_sal ;

end loop ;

--关闭游标

close emp_sal_cursor;

end ;

例:使用记录类型和游标检索数据

declare

--定义变量

typeemp_record is record(

v_salemp.sal%type ,

v_idemp.empno%type

);

v_emp_record emp_record ;

--定义游标

cursor emp_sal_cursor is selectsal ,empno from emp where deptno = 10 ;

begin

--打开游标

openemp_sal_cursor ;

--提起游标信息

fetch emp_sal_cursor into v_emp_record ;

while emp_sal_cursor%found loop

dbms_output.put_line(v_emp_record.v_sal ||‘, ‘|| v_emp_record.v_id);

fetch emp_sal_cursor into v_emp_record ;

end loop ;

--关闭游标

close emp_sal_cursor;

end ;

游标的FOR循环

        PL/SQL语言提供了游标for循环语句,自动执行游标的OPEN,FETCH,CLOSE语句和循环语句的功能,当进入循环式,游标for循环语句自动打开,并提取第一行游标数据,当程序处理完当前所提取的数据而进入下一次循环式,游标for循环语句自动的提取下一行的数据,当提取晚结果集合中所有的数据行后自动结束循环,并自动关闭游标。

格式:

for index_var in cursor_name loop

--处理代码

end loop ;

例:使用for循环检索数据

declare

--定义游标

cursor emp_sal_cursor is select * from emp where deptno = 10 ;

begin

for c in emp_sal_cursor loop

dbms_output.put_line(c.sal ||‘, ‘|| c.hiredate);

end loop ;

end ;

例:使用游标和for循环更新数据

declare

cursoremp_sal_cursorisselect  empno,sal  fromemp ;

v_empnumber(4 ,2 ) ;

begin

forcinemp_sal_cursorloop

ifc.sal <1000thenv_emp := 0.05 ;

elsifc.sal <2000thenv_emp := 0.03 ;

elsifc.sal <5000thenv_emp := 0.02 ;

elsev_emp := 0.01 ;

endif ;

dbms_output.put_line(c.sal ||‘,‘|| c.empno);

updateempsetsal = sal* (1+ v_emp) whereempno = c.empno ;

endloop ;

end ;

带参数的游标

游标在定义的时候,可以带参数。参数在指定数据类型时,不能指定它的长度。

例:当声明的游标带有参数时,通过游标for循环语句来为游标传递参数

declare

cursor c_emp(dept_no  number ) is select  sal  , ename from

emp here deptno = dept_no ;

begin

for c in c_emp(20)  loop

dbms_output.put_line(c.sal || ‘,‘||c.ename);

end loop ;

end

隐示游标

不需要显示的定义游标。调用格式:SQL% ;

begin

update emp set sal = sal +100 where empno = 7444 ;

if sql%notfound then  dbms_output.put_line(‘没有此人‘);

end if ;

end

时间: 2024-10-10 23:21:34

Oracle 学习笔记 16 -- 游标(PL/SQL)的相关文章

Oracle 学习笔记 17 -- 异常处理(PL/SQL)

程序在执行过程中出现异常是正常的,在程序的编写过程中出现异常也是不可避免的.但是要有相应的异常处理的机 制,来保证程序的正常执行.PL/SQL程序执行过程中出现的错误,称为异常.一个优秀的程序都应该能够正确处理 各种出错的情况,并尽可能的从错误中恢复.PL/SQL提供了异常处理机制. 概念: 异常处理(exception)是用来处理正常执行过程中未预料的事件,程序块的异常处理定义的错误和自定义的错误, 由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会异常的终止. 有三种类型的错误

Oracle学习笔记十 使用PL/SQL

PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构,可用于创建存储过程.触发器和程序包,给SQL语句的执行添加程序逻辑,与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性.灵活性和安全性. PL/SQL 的优点 支持 SQL,在 PL/SQL 中可以使用: 1.数据操纵命令 2.事务控制命令 3.游标控制 4.

Oracle学习笔记十一 游标

游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作,然后将操作结果写回数据表中. 逐行处理查询结果,以编程的方式访问数据. 游标的定义 游标作为一种数据类型,首先必须进行定义,其语法如下: cursor 游标名 is select 语句; cursor是定义游标的关键词,select是建立游标的数据表查询命令. declare cursor c1

Oracle学习笔记之第八节sql语句(开发课学生指南051)

开发课 做练习 学生指南051 les01 ppt oracle经常两表连接,叫第三范式,如带有ID性质的东西 以下是sql语句的命令 select * from departments; 部门表 select * from employees; 员工表 select employee_id,rowid,rownum from employees where employee_id>=200;  64进制内部运算 rownum本质查询第几行 select employee_id,rowid,ro

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

PL/SQL子程序 包括函数和过程.这里的函数指的是用户自己定义的函数,和系统函数是不同的.子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用.Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它.这样就叫做存储过程或者是函数.过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据. 函数 如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数. 可以使用SQL语句定义函数. 基

Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE

oracle从入门到精通复习笔记续集之PL/SQL(轻量版)

复习内容: PL/SQL的基本语法.记录类型.流程控制.游标的使用. 异常处理机制.存储函数/存储过程.触发器. 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都在先运行这一句:set serveroutput on结构:declare--声明变量.类型.游标begin--程序的执行部分(类似于java里的main()方法)exception--针对begin块中出现的异常,提供处理的机制--when...then...--whe

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

oracle学习笔记 SQL语句执行过程剖析讲课

oracle学习笔记 SQL语句执行过程剖析讲课 这节课通过讲述一条SQL语句进入数据库 和其在数据库中的整个的执行过程 把数据库里面的体系结构串一下. 让大家再进一步了解oracle数据库里面的各个进程.存储结构以及内存结构的关联关系. 首先来讲整个体系中有客户端.实例和数据库 数据库里有三类文件 控制文件ctl.数据文件dbf.日志文件log 实例中SGA有六大池子 第一大内存区shared pool即共享池 第二大内存区buffer cache 第三块是redo log 我们主要讲上面的三