xiaocen 2015-02-09
Oracle的游标介绍
Oracle中的PL/SQL的游标是指把数据库中查询出来的数据以临时表的形式存放在内存中,游标可以对存储在内存中的数据进行操作,返回一条或者一组数据,或者一条数据也不返回。PL/SQL中的记录和表类型虽然也能用来存储数据,但对一组存储在内存中的数据进行操作,还是不太方便,游标恰好是这方面的工具。
PL/SQL包含隐含游标和显示游标,其中隐含游标用于处理SELECT INTO和DML语句,而显示游标则专门用于处理SELECT语句返回的多行数据,游标的基本操作有:
- 声明游标
- 打开游标
- 提取游标
- 关闭游标
声明游标
定义一个游标名称来对应一条查询语句,语法如下:
CURSOR cursor_name [{parameter_name [IN] data_type [{:=|DEFAULT} value][...]}] IS select_statement [FOR UPDATE [OF column [...]][NOWAIT]]说明:
1. data_type 为输入参数指定数据类型,但不能指定精度或长度
2. FOR UPDATE 用于在使用游标的数据时,锁定游标结果集与表中对应的数据的所有行或部分列
3. OF 如果不使用OF子句,则表示锁定游标结果集与表中对应数据行的所有列,若使用了OF子句,则只锁定指定的列
4. NOWAIT 如果表中的数据行被某用户锁定,那么其他用户的FOR UPDATE操作将会一直等到该用户释放这些数据行的锁定后才会执行,而如果使用了NOWAIT,则其他用户在使用OPEN命令打开游标时会立即返回错误信息。
打开游标
只有打开游标后,Oracle才会执行查询语句,其语法:
OPEN cursor_name [(value,...)];打开游标后,游标对应的SELECT语句也就被执行了,通过检索游标从结果集中获取单行数据并保存到定义的变量中,语法如下:
FETCH cursor_name INTO variable [,...];其中,variable 是用来存储结果集中单行数据的变量,可以选择多个普通类型的变量,一对一地接收行中的列值,也可以使用一个%ROWTYPE类型的变量,或自定义的记录类型变量,接收行中所有的列值。
关闭游标
关闭游标,释放系统资源,其语法如下:
CLOSE cursor_name;