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;