方案步骤为:数据导出到文件(增量或全量),通知接口文件就绪(上传到ftp或提供下载url),接收方下载文件,解析文件并入库。Oracle需要建立对应的临时表和正式表,入库步骤为:清空临时表,批量插入数据,再合并到正式表。

一、数据:

数据可以推送,也可以拉取,可以考虑以数据最新日期为临界点

数据可以导出到文件,也可以接口请求正文直接传输,字段分隔符可选|@|

二、SQL:

清空临时表

delete  from temp_table;

临时表批量插入:values后面动态生成,批量插入时有多行into,数据量过大时建议按1000条数据分多条sql插入

insert all

into temp_table values (‘id_1’,’value_1’)

into temp_table values (‘id_2’,’value_2’)

select 1 rom dual;

合并数据到正式表:update set不能更新主键id,values后面动态生成

merge into formal_table n

using (select * from temp_table t on t.id=n.id)

when matched then update set n.name=t.name,n.age=t.age

when not matched then insert into formal_table values (t.id,t.name,t.age);

三:Java:JdbcTemplate,执行sql语句时不能有末尾的分号

JdbcTemplate jdbc = new JdbcTemplate(dataSource);  //使用已配置好的数据源

SqlRowSet rowSet = jdbc.queryForRowSet(“select * from temp_table where rownum=1“);  //临时表和正式表结构完全一样

String[] columnNames = rowSet.getMetaData().getColumnNames();  //获取表的所有列

jdbc.update(sql);  //执行insert或merge语句

String[] values=StringUtils.splitByWholeSeparatorPreserveAllTokens(line,”|@|”);  //切分数据行

StringBuilder sqlInsert = new StringBuilder(“insert all\n”); //拼接sql insert语句

sqlInsert.append(“into temp_table values (‘“).append(StringUtilis.join(split,”’,’”,0,Math.min(split.length, columnNames.length))).append(“’)\n”);

sqlInsert.append(“select 1 from dual”);

StringBuilder sqlMerge = new StringBuilder(“merge into formal_table n\n”); //拼接sql merge语句

sqlMerge.append(“using (select * from temp_table) t on t.id=n.id\n”);

sqlMerge.append(“when matched then update set ”);

for(int i=1;i<columnNames.length;i++) sqlMerge.append(“n.”+columnNames[i]+”=t.”+columnNames[i]+”,”); //不更新主键i=0

sqlMerge.setCharAt(sqlMerge.length()-1, ‘\n’); //替换末尾逗号为换行符

sqlMerge.append(“when not matched then insert values (t.”).append(StringUtils.join(columnNames, “,t.”)).append(“)”);

四:设计

数据库表数据传输到Oracle方案的更多相关文章

  1. access数据库表导入到oracle

    1.本机安装access数据库 25M左右2.创建ODBC数据源,要选择oracle C:\Windows\SysWOW64\odbcad32.exe 3.打开要导入的 .mdb文件 右键表--> ...

  2. oracle如何导出和导入数据库表

    oracle如何导出和导入数据库表 oracle如何将项目中的表导出后在导入自己的数据库中,这是一个完整的操作,对于数据库备份或在本地查看数据验证数据进场用到,一般情况下我都用dos黑窗口进行操作,简 ...

  3. oracle如何导出和导入数据库/表

    oracle如何导出和导入数据库/表 oracle如何将项目中的表导出后在导入自己的数据库中,这是一个完整的操作,对于数据库备份或在本地查看数据验证数据进场用到,一般情况下我都用dos黑窗口进行操作, ...

  4. 十二、oracle 数据库(表)的逻辑备份与恢复

    一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...

  5. oracle 数据库(表)的逻辑备份与恢复

    一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...

  6. 批量导出数据库表(oracle)

    批量导出数据库表(oracle) 要求:导出sql文件,包含表结构和数据. 方案一 1:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功2:导入与导出 ...

  7. oracle数据库表空间追加数据库文件方法

    oracle数据库表空间追加数据库文件方法   针对非大文件方式表空间,允许追加文件进行表空间的扩展,单个文件最大大小是32G  第一种方式:表空间增加数据文件    www.2cto.com   1 ...

  8. Oracle 数据库表同步方法浅议

    总结一下Oracle数据库表级别的复制同步 一.通过触发器进行表的复制 原理,是监听表上都某一字段进行的DML操作,然后得到DML操作的数据,重新在另一个表上执行DML操作. 优点: 简单,编写一个触 ...

  9. Oracle数据库表设计时的注意事项

    表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...

随机推荐

  1. MySQL索引优化详解

    MySQL存储引擎简介 查看命令 a. 查看所使用的MySQL现在已提供什么存储引擎: mysql> show engines; b. 查看所使用的MySQL当前默认的存储引擎: mysql&g ...

  2. Java环境搭建---(基础)

    首先下载eclipse开发工具,下载地址:http://www.eclipse.org/downloads/,界面如下: 选择eclipse juno(4.2)的版本进入界面 点击Downloads, ...

  3. HDU 3923 Invoker(polya定理+乘法逆元(扩展欧几里德+费马小定理))

    Invoker Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 122768/62768K (Java/Other) Total Subm ...

  4. html5: 新特性(表单)

    表单: 在html4中,表单内的从属元素必须写在表单内部.在html5中,可以吧他们书写在页面任何位置,然后指定form属性,属性值为表单ID,这样就指定表单了. formaction,formmet ...

  5. c# 文件日志处理 需要log4net配置

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  6. Android程序员学WEB前端(3)-HTML(3)-表单嵌套-Sublime

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76522586觉得博文有用,请点赞,请评论,请关注,谢谢!~ 表单嵌套: <!DO ...

  7. [AOP] 7. 一些自定义的Aspect - Circuit Breaker

    Circuit Breaker(断路器)模式 关于断路器模式是在微服务架构/远程调用环境下经常被使用到的一个模式.它的作用一言以蔽之就是提高系统的可用性,在出现的问题通过服务降级的手段来保证系统的整体 ...

  8. Python自定义大小截屏

    蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小蛐蛐找到了他,说是想要一个可以截图工具. 大致需要做出这样的效果. 虽然已经很久不写Python代码了,但是没办法,盛情难却啊,只好硬着头皮上了. ...

  9. 海思arm平台AAC音频转码cpu占用高、效率低的问题解决

    问题背景 目前市面上的大部分IPC摄像机音频输出基本都是G711.G726编码格式,而在类似于<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>这种业务中,都是 ...

  10. 深度学习(六十七)metal forge深度学习库使用

    1.设置输入: let input = Input() 或者 let input = Input(width: 100, height: 100, channels: 3) 2.创建网络: let o ...