掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在使用DB2數(shù)據(jù)庫中的游標時,您可能會有這些問題:如果對一個表設(shè)置了游標,可不可以同時對這個表進行update操作? 怎么樣操作才不會影響游標的位置? 本文將為您講解處理的方法,供您參考。

創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十載的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都上1000+中小型企業(yè)策劃設(shè)計了網(wǎng)站。
使用定位操作更改行
可更新游標支持通過游標更新行的數(shù)據(jù)修改語句。當定位在可更新游標中的某行上時,您可以執(zhí)行更新或刪除操作,這些操作針對用于在游標中建立當前行的基表行。
這些就稱為定位更新。
定位更新在打開游標的同一個連接上執(zhí)行。
這就允許數(shù)據(jù)修改共享與游標相同的事務(wù)空間,并且使游標保持的鎖不會阻止更新。
有兩種方法在游標中執(zhí)行定位更新:
UPDATE 或 DELETE 語句中的 Transact-SQL WHERE CURRENT OF 子句。
數(shù)據(jù)庫 API 定位更新函數(shù)或方法,如 ODBC SQLSetPos 函數(shù)。
使用 Transact-SQL 執(zhí)行定位更新
Transact-SQL WHERE CURRENT OF 子句典型用于 Transact-SQL 存儲過程、觸發(fā)器以及腳本
(當需要根據(jù)游標中特定行進行修改時)。存儲過程、觸發(fā)器、或腳本將:
DECLARE 和 OPEN 游標。
用 FETCH 語句在游標中定位于一行。
用 WHERE CURRENT OF 子句執(zhí)行 UPDATE 或 DELETE 語句。用 DECLARE 語句中的 cursor_name
作為 WHERE CURRENT OF 子句中的 cursor_name。
例程:
declare cursor_name cursor for #p#
select * from T2
for update
open cursor_name
fetch next from cursor_name
while @@Fetch_Status = 0
begin
update T2 set sname = 'lx_' + sname --right(sname,len(sname)-3)
where current of cursor_name
fetch next from cursor_name
end
close cursor_name
deallocate Cursor_Name
在DB2中也有類似的用法,由于DB2中的SQL語法和SQL SERVER有所不同,所以DB下的存儲過程如下:
CREATE PROCEDURE KYJT.SP_TESTT ( )
SPECIFIC KYJT.SQL060421171925193
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
MODIFIES SQL DATA
INHERIT SPECIAL REGISTERS
BEGIN
DECLARE PNAME VARCHAR(50);
DECLARE PID INT;
DECLARE v_count int;
DECLARE SQLSTATE CHAR(5);
DECLARE at_end INT DEFAULT 0; #p#
DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE C1 CURSOR FOR SELECT ID,NAME FROM KYJT.TESTT FOR UPDATE ;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
OPEN C1;
INS_LOOP:
LOOP
FETCH C1 INTO PID,PNAME;
if at_end = 1 then
LEAVE INS_LOOP;
END IF;
UPDATE KYJT.TESTT A
SET NAME = (SELECT NAME FROM KYJT.TEST B WHERE B.ID=PID) WHERE CURRENT OF C1;
END LOOP;
CLOSE C1;
END

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流