ORA-01830: 日期格式图片在转换整个输入字符串之前结束(增量同步)

Posted 李润

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-01830: 日期格式图片在转换整个输入字符串之前结束(增量同步)相关的知识,希望对你有一定的参考价值。

mdm_organization(源表)与mdm_zn_organiztaion(目标表)之间进行增量同步,同步规则:先查询目标表中数据的最大的最后修改时间,根据最大的最后修改时间在源表中进行过滤查询。查询结果与目标表进行合并(使用merge into)

查询表中数据的最大的最后修改时间

select nvl(max(org_last_modified_time),to_date(\'1900\',\'yyyy\')) from mdm_zn_organization

根据最大的最后修改时间在源表中进行过滤

select * from mdm_organization o where o.org_last_modified_time > (select nvl(max(org_last_modified_time),to_date(\'1900\',\'yyyy\')) from mdm_zn_organization)

这种错误表示两个时间比较时类型要一致,都转为Date类型。修改如下

select * from mdm_organization o where o.org_last_modified_time > to_date((select nvl(max(org_last_modified_time),to_date(\'1900\',\'yyyy\')) from mdm_zn_organization),\'yyyy-mm-dd hh24:mi:ss\')

这种错误表示传入的时间格式为:2017-11-18 00:31:08.0,共21位,而\'yyyy-mm-dd hh24:mi:ss\'格式需要19位。

所以先用substr 将时间截取前19位,修改如下:

select * from mdm_organization o where o.org_last_modified_time > to_date(substr((select nvl(max(org_last_modified_time),to_date(\'1900\',\'yyyy\')) from mdm_zn_organization),1,19),\'yyyy-mm-dd hh24:mi:ss\')

另一种写法如下:

select * from mdm_organization o where o.org_last_modified_time > (select nvl(max(to_date(substr(org_last_modified_time,1,19),\'yyyy-mm-dd hh24:mi:ss\')),to_date(\'1900\',\'yyyy\')) from mdm_zn_organization)

查询结果与上面一样。

根据mapper下的queryAll方法查询出大于最大的最后修改时间的数据,返回list,代码如下:

List<Map<String,String>> list = OrganizationMapper.queryAll();
for (Map<String,String> org_map : list) {
  UUID random
= UUID.randomUUID(); String str = random.toString(); String newStr = str.replace("-", ""); org_map.put("ID", newStr);   OrganizationMapper.insertOrg(org_map); }

 

接下来执行merge into操作,使用mybatis的自动生成sql语句,如下

<insert id="insertOrg" parameterType="java.util.Map">
        MERGE INTO mdm_zn_organization T1
USING (SELECT 
        <foreach collection="map.keys" item="k" index="index" open="" separator="," close=" ">
            \'${map.get(k)}\' ${k}
        </foreach>
         FROM DUAL) T2
ON (T1.CODE = T2.ORG_CODE)
WHEN MATCHED THEN
  UPDATE
     SET T1.ORG_PARENT_CODE        = T2.ORG_PARENT_CODE,
         T1.ORG_COMPANY_CODE       = T2.ORG_COMPANY_CODE,
         T1.ORG_LAST_MODIFIED_TIME = T2.ORG_LAST_MODIFIED_TIME
WHEN NOT MATCHED THEN
  INSERT
    (T1.ID,
     T1.CODE,
     T1.ORG_PARENT_CODE,
     T1.ORG_COMPANY_CODE,
     T1.ORG_LAST_MODIFIED_TIME)
  VALUES
    (T2.ID,
     T2.ORG_CODE,
     T2.ORG_PARENT_CODE,
     T2.ORG_COMPANY_CODE,
     T2.ORG_LAST_MODIFIED_TIME)
    </insert>

 接下来配置spring quartz定时器。定时执行增量同步操作。

到此增量同步完成。

以上是关于ORA-01830: 日期格式图片在转换整个输入字符串之前结束(增量同步)的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01830: 日期格式图片在转换整个输入字符串之前结束

我在解析 XML 文件时收到 ORA-01830:日期格式图片在转换整个输入字符串之前结束

[技术分享]20171129_mybatis _ ORA-01830: 日期格式图片在转换整个输入字符串之前结束

ORA-01830: 日期格式图片在转换整个输入字符串之前结束(增量同步)

ORA-01830

日期格式图片在转换整个输入字符串之前结束