oracle中sql rowcount的作用

2021-06-29 15:12:44 字數 1764 閱讀 7041

起因:新開發個儲存過程,需要當乙個使用者呼叫儲存過程操作一行資料時,另外的使用者不允許呼叫過程操作該資料。

解決辦法:先將該記錄的狀態改為處理中,當別的使用者看到為處理中時則跳出過程。此時用到了sql%rowcount來判斷是否更新了記錄的狀態

update table t set t.status = 'processing' where t.id = p_id and t.status <> 'processing' ;

if sql%rowcount = 0 then

return;

end if;

由於沒有用過sql%rowcount,所以特意測試了一下,下面是對sql%rowcount功能的測試:

--先建個測試用表

create table z_temp

( c1 varchar2(10),

c2 varchar2(10),

c3 varchar2(10)

);

--向表中插入3行測試資料,插入後:

c1         c2         c3

---------- ---------- ----------

1

2

3

寫了一段過程來測試:

declare

v_n number;

begin

update z_temp t set t.c2 = '1' where t.c1 = 1; --更新一行記錄 c1 = 1

v_n := sql%rowcount;

dbms_output.put_line('第1.0次:' || v_n);

commit;

v_n := sql%rowcount;

dbms_output.put_line('第1.1次:' || v_n);--提交後sql%rowcounty已經為0了

update z_temp t set t.c2 = '2' where t.c1 = 2; --更新一行記錄 c1 = 2

v_n := sql%rowcount;

dbms_output.put_line('第2次:' || v_n);

update z_temp t set t.c2 = '3'; --更新三行記錄

v_n := sql%rowcount;

dbms_output.put_line('第3次:' || v_n);

commit;

end;

/*輸出結果:

第1.0次:1

第1.1次:0

第2次:1

第3次:3

*/

執行後表中資料:

c1         c2         c3

---------- ---------- ----------

1 3

2 3

3 3

由此可見sql%rowcount只會記錄未被提交的最後一條sql語句的影響行數。這點很重要,如果想統計多個sql的合計影響行數,就必須在每個sql後面,用乙個變數儲存當前的sql%rowcount。





oracle中累計求和 oracle累計求和

poj2001 shortest prefixes trie樹應用 沉迷wow又頹了兩天orz,暴雪爸爸要在國服出月卡了.這是要我好好學習嗎?趕緊來刷題了.oj 題目大意是求所有字串裡每乙個字元 硬體相關 jtag介面 jtag joint test action group,聯合測試行動小組 是一...

oracle中累計求和 oracle累計求和

oracle累計求和 將當前行某列的值與前面所有行的此列值相加,即累計求和 方法一 with t as select 1 val from dual union all select 3 from dual union all select 5 from dual union all select ...

Oracle中臨時表

最近考慮到我們的資料庫端寫儲存過程關於臨時表使用的情況,由於我們 現在還不清楚資料庫端到底是怎麼處理的,是否和sql server的處理方式相 同,是否會存在隱患等等一些問題,為了避免將來不必要的麻煩我做了深 入的研究和檢視了一些權威的資料,現在和大家共享,希望大家在處理 oracle臨時表是注意一...