oracle pl/sql之使用游标变量更新数据库

前情提要:

使用游标或游标变量不但能够对数据进行查询,同样也可以对数据进行更新。使用游标对数据进行更新是指在游标定位下,修改或删除表中指定的数据行。为了实现使用游标更新数据,需要在声明游标的时候使用FOU UPDATE,以便在打开游标时锁定游标结果集与表中对应数据行的所有列和部分列

为了保证正在进行操作的数据不被另外的用户修改,Oracle提供了一个for update选项来对所选择的行进行锁住。使用for update选项后声明游标的语法形式如下:

cursor cursr_name is select语句 for update[of column[,column]] [nowait]

其中,of子句用来指定要锁定的列,如果忽略了of子句,那么表中选择的数据行都将被锁定。如果这些数据行已经被其他用户锁定,那么正常情况下,for update操作会一直等到该用户释放对这些行的锁定后才继续自己的操作。对于这种情况,可使用nowait子句,这时,如果这些行被另一用户的操作锁定,则open 立即返回并给出错误提示。

当使用了 fou update声明游标后,可在delete和update语句中使用where current of子句,修改或删除游标结果集中当前行对应的表中的数据行

where{current of cursor_name| serarch_condition}

程序演示:

declare

cursor my_cursor is select * from emp for update of sal nowait;

v_sal pls_integer;

begin

for r in my_cursor loop

if r.sal<3000 then

update emp set sal=sal+200 where current of my_cursor;

end if;

end loop;

end;