2.6 數據庫更新特定字段SQL/語句塊

1.更新單表中某一字段

1.1適用於單條或者由於in條件1-1000條數據數據庫

下面是更改CMS_CONTRACT_INFO 表中合同編號爲CMCC987最後更新時間爲當前時間,或者註釋裏特定時間。spa

1 UPDATE CMS_CONTRACT_INFO CCI
2 SET CCI.LAST_UPDATE_DATE = SYSDATE
3 /* to_date('20190516 10:12:50','yyyyMmdd HH24:mi:ss')*/
4 WHERE CCI.CONTRACT_NO IN ('CMCC987'

 

1.2 使用where表條件可更改大批量數據,但改以前必定注意備份。code

1.3 有時候須要根據條件日後推時間。我使用語句塊來完成。blog

如下語句塊是,完成根據條件( 你要更改的數據條件)完成每10分鐘日後更新30條數據,數據的開始時間都由你設定。class

 1 --存儲過程或語句塊聲明時使用
 2 DECLARE  
 3 --定義更改時間變量
 4 V_COMMIT_TIME DATE;
 5 --定義你要打散數量
 6 V_COUNT INT;
 7 --你參數的類型和數據庫一致
 8 V_CONTRACT_NO CMS.CMS_CONTRACT_INFO.CONTRACT_NO%TYPE;
 9 BEGIN
10 --初始化參數
11 V_COUNT := 1;
12 V_COMMIT_TIME := sysdate;
13 /* V_COMMIT_TIME := to_date('2018-12-10 00:00:01', 'yyyy-mm-dd hh24:mi:ss');*/
14 --把須要改的數據條件標識數據循環到CONTRACT_CURSOR中
15 for CONTRACT_CURSOR in(SELECT CI.CONTRACT_NO FROM CMS_CONTRACT_INFO CI
16 WHERE CI.CONTRACT_NO in()group by CI.CONTRACT_NO)
17 
18 LOOP
19 --根據循環的條件更新數據
20 UPDATE CMS.CMS_CONTRACT_INFO CI
21 SET LAST_UPDATE_DATE = V_COMMIT_TIME
22 WHERE CI.CONTRACT_NO = CONTRACT_CURSOR.CONTRACT_NO;
23 --超過30條更新下一次
24 IF V_COUNT = 30 THEN
25 --打印修改數目
26 DBMS_OUTPUT.PUT_LINE('更新:'||TO_CHAR(V_COUNT));
27 V_COUNT := 0; 
28 --當前時間加10分鐘一批
29 V_COMMIT_TIME := (V_COMMIT_TIME+10/1440);
30 COMMIT;
31 END IF;
32 --下一次更新
33 V_COUNT := V_COUNT + 1;
34 END LOOP;
35 DBMS_OUTPUT.PUT_LINE('更新:'||TO_CHAR(V_COUNT));
36 END;
相關文章
相關標籤/搜索