1、 游标属性。
游标属性的值总是属于最后一次执行的sql语句。除%isopen 的初值是FALSE 之外,都是NULL。
SQL%FOUND 如果有修改则返回true
SQL%NOTFOUND 没有修改则返回true
SQL%ROWCOUNT 修改记录行数。
SQL%ISOPEN 游标是否打开。\
SQL%BULK_ROWCOUNT forall语句的修改记录
SQL%BULK_EXCEPTION forall 修改异常.
案例:
Procedure name (rename_count out boolen)
Is
Begin
Insert/Update/delete_ Sql;
Rename_cout_out :=SQL%ROWCOUNT / SQL%FOUNT
End;
2、 游标基础
游标可以想象成一个简单的指针。指向一个或者多个表的查询集。如:
Cursor employee_cur is select * from employee;
申明之后,需要打开游标;
Open employee_cur
然后,提前数据
Fetch employee_cur into employee_rec;
然后处理 记录。最后关闭游标
Close employee_cur;
隐式cursor
主要值系统里面在delete update insert时候,只懂会有一个cursor 会进行处理。所以系统在更新结束后可以增加类似如: SQL%ROWCOUNT 等表示处理的结果。
Ref cursor
定义一个数据类型为cursor
Type rename_cursor is ref cursor 【return return_type】;--return 可有可无。
以上面的数据类型定义一个变量:
L_cursor rename_cursor;
打开 L_cursor 并指向query数据集;
Open L_cursor is select * from table
最后 处理L_cursor之后 关闭
Close L_cur搜人
Cursor带参数
如:
Cursor cursor_name(var_name in/out datatype )
Is
Query_sql ;
Begin
Open cursor_name(参数)
Fetch
Close 等。
3、 Cursor 的其他几个特性:
Select … FOR update;
作用: 读之前给予一个行级锁。在读结束之后才能update;
用法: cursor curname is sql_query for update; --这里增加一个forupdate;
注意的是 如果 有for update 那么 需要增加commit/rollback 表示运行结束:
Where current of:
作用:SQL 中 为游标的update /delete 语句提供,用于修改最后一条记录:
用法:update table_name
Set set_clause;
Where current of cursor_name; --这里是游标不是记录集。
这条语句值更新游标中的最后一条记录。