zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Linux CPU监控指标
    Elasticsearch强大的聚合功能Facet
    业务逻辑层的设计
    数据结构中的棧在C#中的实现
    使用WPF教你一步一步实现连连看
    ASP.NET之旅—再一次与ASP谋面
    每日一帖示例程序(使用TWebBrowser基于HTML做)
    在程序异常中记录堆栈信息(使用ExWatcher)
    获取TBitMap图像缓冲区,提高图像处理速度
    delphi实现穿XP防火墙
  • 原文地址:https://www.cnblogs.com/Smileing/p/11014821.html
Copyright © 2011-2022 走看看