以下的文章主要是介绍Oracle游标的删除与更新我们都知道在PL/SQL中是可以使用UPDATE与DELETE语句来更新或者删除相关的数据行显式Oracle游标只有在需要获得多行数据的情况下使用
PL/SQL提供了仅仅使用Oracle游标就可以执行删除或更新记录的方法
UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据
要使用这个方法在声明游标时必须使用FOR UPDATE子串当对话使用FOR UPDATE子串打开一个Oracle游标时所有返回集中的数据行都将处于行级(ROWLEVEL)独占式锁定其他对象只能查询这些数据行不能进行UPDATEDELETE或SELECTFOR UPDATE操作
语法
FOR UPDATE [OF [schema]lumn[[schema]lumn]
[nowait]
在多表查询中使用OF子句来锁定特定的表如果忽略了OF子句那么所有表中选择的数据行都将被锁定如果这些数据行已经被其他会话锁定那么正常情况下ORACLE将等待直到数据行解锁
在UPDATE和DELETE中使用WHERE CURRENT OF子串的语法如下
WHERE{CURRENT OF cursor_name|search_condition}
例
DELCARE
CURSOR c IS SELECT empnosalary
FROM emp
WHERE comm IS NULL
FOR UPDATE OF comm;
v_comm NUMBER();
BEGIN
FOR r IN c LOOP
IF rsalary< THEN
v_comm:=rsalary*;
ELSEIF rsalary< THEN
v_comm:=rsalary*;
ELSEIF rsalary< THEN
v_comm:=rsalary*;
ELSE
v_comm:=rsalary*;
END IF;
UPDATE emp;
SET comm=v_comm
WHERE CURRENT OF cl;
END LOOP;
END
以上的相关内容就是对Oracle游标中的更新和删除的介绍望你能有所收获