Oracle游標(biāo)的刪除與更新實際操作步驟
以下的文章主要是介紹Oracle游標(biāo)的刪除與更新,我們都知道在PL/SQL中是可以使用UPDATE與DELETE語句來更新或者刪除相關(guān)的數(shù)據(jù)行。顯式Oracle游標(biāo)只有在需要獲得多行數(shù)據(jù)的情況下使用。
PL/SQL提供了僅僅使用Oracle游標(biāo)就可以執(zhí)行刪除或更新記錄的方法。
UPDATE或DELETE語句中的WHERE CURRENT OF子串專門處理要執(zhí)行UPDATE或DELETE操作的表中取出的最近的數(shù)據(jù)。
要使用這個方法,在聲明游標(biāo)時必須使用FOR UPDATE子串,當(dāng)對話使用FOR UPDATE子串打開一個Oracle游標(biāo)時,所有返回集中的數(shù)據(jù)行都將處于行級(ROW-LEVEL)獨占式鎖定,其他對象只能查詢這些數(shù)據(jù)行,不能進(jìn)行UPDATE、DELETE或SELECT...FOR UPDATE操作。
語法:
- FOR UPDATE [OF [schema.]table.column[,[schema.]table.column]..
 - [nowait]
 
在多表查詢中,使用OF子句來鎖定特定的表,如果忽略了OF子句,那么所有表中選擇的數(shù)據(jù)行都將被鎖定。如果這些數(shù)據(jù)行已經(jīng)被其他會話鎖定,那么正常情況下ORACLE將等待,直到數(shù)據(jù)行解鎖。
在UPDATE和DELETE中使用WHERE CURRENT OF子串的語法如下:
- WHERE{CURRENT OF cursor_name|search_condition}
 
例:
- DELCARE
 - CURSOR c1 IS SELECT empno,salary
 - FROM emp
 - WHERE comm IS NULL
 - FOR UPDATE OF comm;
 - v_comm NUMBER(10,2);
 - BEGIN
 - FOR r1 IN c1 LOOP
 - IF r1.salary<500 THEN
 - v_comm:=r1.salary*0.25;
 - ELSEIF r1.salary<1000 THEN
 - v_comm:=r1.salary*0.20;
 - ELSEIF r1.salary<3000 THEN
 - v_comm:=r1.salary*0.15;
 - ELSE
 - v_comm:=r1.salary*0.12;
 - END IF;
 - UPDATE emp;
 - SET comm=v_comm
 - WHERE CURRENT OF c1l;
 - END LOOP;
 - END
 
以上的相關(guān)內(nèi)容就是對Oracle游標(biāo)中的更新和刪除的介紹,望你能有所收獲。
文章出自: http://www.programbbs.com/doc/class10-3.htm
【編輯推薦】















 
 
 
 
 
 
 