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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM