1. 程式人生 > >ORA-01830: 日期格式圖片在轉換整個輸入字符串之前結束(增量同步)

ORA-01830: 日期格式圖片在轉換整個輸入字符串之前結束(增量同步)

最大的 IE 比較 and value close when pda bst

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: 日期格式圖片在轉換整個輸入字符串之前結束(增量同步)