2.6 数据库更新特定字段SQL/语句块

1.更新单表中某一字段

1.1适用于单条或者因为in条件1-1000条数据

下面是更改cms_contract_info 表中合同编号为cmcc987最后更新时间为当前时间,或者注释里特定时间。

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表条件可更改大批量数据,但改之前一定注意备份。

1.3 有时候需要根据条件往后推时间。我使用语句块来完成。

以下语句块是,完成根据条件( 你要更改的数据条件)完成每10分钟往后更新30条数据,数据的开始时间都由你设定。

 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;

 

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐