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定时器。定时执行增量同步操作。

到此增量同步完成。

原文地址:https://www.cnblogs.com/lirun/p/9116796.html

时间: 2024-07-31 11:13:15

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

Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法

1.错误原因: date类型不能包含秒以后的精度. 如日期:2010-01-01 20:02:20.0 解决方法:将日期秒以后的精度去除, to_date(substr(INVOICE_DATE,1,10),'yyyy-mm-dd')如日期:2010-01-01 20:02:20 2.INSERT INTO TEST2 (C1, C2,c3) VALUES (${v1},${v2},to_date(${v3},'yyyy-mm-dd'));oracle里面不需要以“:”结尾. 3.修改数据库日期

苹果heic格式图片怎么转换jpg

苹果手机的系统的自升级ios11以后,就一直倍受大家的关注,可谓是做出了很多的改变,最引人注意的就是图片的格式了,通过iPhone手机拍摄的图片的都将会默认自动保存为HEIC格式.这种方法不但省内存而且画质原原本本的保留下来了,但是只能在部分的苹果机可以打开,图片上传到电脑上都不能直接的打开,那苹果heic格式图片怎么转换jpg呢?1.首先我们通过数据线或其他方式将iPhone手机上的图片导入到电脑上,然后在电脑上运行苹果heic图片转换器:2.点击页面上的的添加图片按钮,选择要转换的图片导入到

js如何将选中图片文件转换成Base64字符串?

如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传文件都是在web页面端通过表单直接提交,再由服务器端捕获请求来进行处理的.但是在前后端分离趋于一种流行趋势,再加上Android和iOS开发技术日渐成熟, 大部分团队都会选择在服务器端仅提供一套通用的webservice数据接口,而web页面.Android和iOS统一都通过这套数据接口来向服务器发送请求和获

mysql 中的日期格式。date_format( ) 转换格式

date_format( ) 转换格式 : 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (00-23) %h 小时 (01-12) %I 小时 (01-12) %i 分钟,数值(00-59) %j 年的天 (001-366) %k 小时 (0-23) %l 小时 (1-12) %M 月名 %m 月,数值(00-12) %p AM 或 PM %r 时间,12-小

js时间戳与日期格式之间的转换

转换方法: var date = new Date(时间戳); //获取一个时间对象  注意:如果是uinx时间戳记得乘于1000. 比如php函数time()获得的时间戳就要乘于1000 //获取时间日期的方法 date.getFullYear();//获取完整的年份(4位,1970) date.getMonth();//获取月份(0-11,0代表1月,用的时候记得加上1) date.getDate();//获取日(1-31) date.getTime();//获取时间(从1970.1.1开始

java中date日期格式的各种转换

示例 Date dt =new Date(); System.out.println(dt); //格式: Wed Jul 06 09:28:19 CST 2016 //格式:2016-7-6 String formatDate = null; formatDate = DateFormat.getDateInstance().format(dt); System.out.println(formatDate); //格式:2016年7月6日 星期三 formatDate = DateForma

oracle 日期格式

oracle 日期格式 to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,"转换格式" ) 即把给定的日期按照"转换格式"转换. 转换的格式: 表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年 表示month的:mm 用2位数字表示月:mon 用简写形式 比

php中时间戳和日期格式的转换

一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 结果:1232553600 说明:返回2009年1月22日0点0分0秒时间戳 二,PHP时间戳函数获取英文文本日期时间 示例如下: 便于比较,使用date将当时间戳与指定时间戳转换成系统时间 (1)打印明天此时的时间戳strtotime(”+1 day”) 当前时间:echo date(”Y-m-d H:i:s”,time()) 结果

SQLserver中用convert函数转换日期格式

SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用convert函数转换日期格式 SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 2004-09-12 11:06:08.177 整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(), 120