声明和打开游标
游标
1游标是指把从数据库查询出来的数据以临时表的形式存放在内存中。
2游标可以对存储在内存的数据进行操作,返回一条或一组记录或者不返回记录。
3PL/SQL的纪录和表类型虽然也可以存储数据,但对一组存储在内存的数据进行操作,没有游标方面
4游标的操作:声明游标,打开游标,提前游标,关闭游标。
5游标类似指针,一次可以处理其中一行
6游标分类
1)显示游标:专门处理select语句返回的多行数据
2)隐示游标:用于处理select into 和DML语句,oracle会自动创建声明隐式游标来处理结果数据。

这里写图片描述

原因:rowtype是存一行数据,而我返回太多行了

修正后
这里写图片描述

声明游标
1声明游标,主要是定义一个游标名称来对应一个查询语句,从而可以使用该游标对查询语句返回的结果集进行单行操作。
语法
cursor cursorName
【(parameterName【in】 data_type 【{:=| default }value】 【,…..】)】
is
select_statement
【for update 【of column【,……】】【nowait】】;

cursorName:游标名称

parameterName【in】 :为游标定义输入参数,in关键字可以省略,用户需要在打开游标时为输入参数赋值,输入参数可以多个,使用逗号(,)分隔开。
data_type :为输入参数指定数据类型,但是不能指定精度或者长度,如可以使用varchar2,但是不能使用varchar2(10)

select_statement:查询语句

for update:用于使用游标的数据时,锁定游标的结果集与表中对应数据行的所有或部分列.
of:如果不使用of字句,表示锁定游标结果集与表中对应数据行的所有列,如果指定of字句,则只锁定指定的列.
nowait:如果表的数据行被用户锁定,那么其他用户的for update操作将会一直等到该用户释放这些数据行的锁定后才会执行。如果使用nowait关键字,则其他用户在使用open打开游标是会立即返回错误信息.

举例
declare
cursor stu_cursor(num number:=1)
is
select sage,sname from student where rownum=num;

打开游标
1声明游标时为游标指定了查询语句,但是该语句不会被立即执行,只有打开游标后,oracle才会执行这些查询语句
2打开游标时,如游标有输入参数,用户必须被这些参数赋值,否则会报错

语法
open cursorName【(value【,….】)】;

举例
open stu_cursor(2);

posted on 2017-04-26 03:05  2637282556  阅读(278)  评论(0编辑  收藏  举报