PL/SQL游标描述

来源:互联网 发布:网络推广股票 编辑:程序博客网 时间:2024/05/16 12:06

游标示意图:

 

游标的类型分为:隐式游标,显式游标,REF游标。

游标的属性:%FOUND,%NOTFOUND,%ROWCOUNT,%ISOPEN

常见的异常:NO_DATA_FOUND,TOO_MANY_ROWS,其他的为others

隐式游标:在使用DML语句时自动创建,自动打开、关闭游标,其名为SQL;

我们可以使用for循环来对游标进行隐式处理。For循环中变量v_test不需要在声明部分声明,它由PLSQL编译器进行隐式的声明。并且for循环开始的时候,游标也就隐式地打开了。

 

显式游标:在PL/SQL语句中定义的游标称为显式游标。显式游标处理需如下步骤:

    a) cursor 游标名 is 查询语句(申明游标);

    b) open 游标名(打开游标);

    c) fetch 游标名 in--游标的当前记录已被隐式地提取给变量 v_testto 变量名(提取行);

    d) close 游标名(关闭游标)。

 

带参数的显式游标:游标的参数,只能接受传递的值,而不能返回值,参数只定义数据类型,没有大小。可以给参数赋一个缺省值

 

 

 

REF游标:用于处理运行时动态执行的SQL语句。创建REF游标需要以下两个步骤:

              a) 申明REF游标类型;

              b) 申明REF游标类型的变量。

 

游标修改和删除操作:

游标修改和删除操作是指在游标定位下,修改或删除表中指定的数据行。这时,要求游标查询语句中必须使用for update选项。

为了对正在处理(查询)的行不被另外的用户改动,oracle提供一个for update子句来对所有选择的行进行锁定,该需求迫使oracle锁定游标结果集合的行,可以防止其他事务处理更新或删除相同的行,直到您的事务处理提交或回退为止。

语法:

Select…from..for update [of column[,column]…][nowait]

如果另一个会话已对活动集中行加了锁,那么select for update操作一直等待到其它的会话释放这些锁后才继续自己的操作,对于这种情况,当加上nowait子句时,如果这些行真的被另一个会话锁定,则open立即返回并给出:ora-0054:resource busy and acquire with nowait specified。如果使用for update声明游标,则可在delete和update语句中使用where current of cursor_name 子句,修改或删除游标结果集合当前行对应的数据表中数据行。