一次性获取多个oracle序列的值,实现关联表多数据的批量insert
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
业务 要求批量导入不小于10W条数据到 user 表,但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表,
并且是以 customer 表的主键作为 user 表的外键。
所以想到要一次性获取多个 序列值,再把对应的序列给不同表,并分别作为两个表的主键和外键的值。
方法很简单 就一句代码 :
String squence ="select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownum <= "+usrlist.size()+")";List<String> squenceList = BatchInsert.selectSql(squence);
"select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownum <= "+usrlist.size()+")";List<String> squenceList = BatchInsert.selectSql(squence);
usrlist 是解析表格后得到的要导入的 user数据 集合,有多少条数据就取多少个序列值。
selectSql 方法 只是JDBC连接数据库 执行了这句SQL 并返回了查到的 序列值,拿到这个序列集合就可以根据业务作后续实现了。
// 单纯查询 public static List<String> selectSql(String sql){Connection conn = null;//定义为空值Statement stmt = null;ResultSet rs = null;conn = getConnection();List<String> list = new ArrayList<String>();try {stmt = conn.createStatement();//创建一个Statement语句对象rs = stmt.executeQuery(sql);//执行sql语句while(rs.next()){list.add(rs.getString("cust_id"));}} catch (SQLException e) {e.printStackTrace();}finally{try {conn.close();stmt.cancel();rs.close();}catch (SQLException e) {e.printStackTrace();}}return list;}
getConnection 方法是获取数据库连接:
public static Connection getConnection(){ //连接数据库的方法 try { Class.forName("oracle.jdbc.driver.OracleDriver"); //初始化驱动包 conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } return conn;}
另 批量导入实现见博文:关联表多数据的批量insert (批量导入,测试10W条数据用时46秒)
一次性获取多个oracle序列的值,实现关联表多数据的批量insert相关推荐
- oracle通过值查字段,Oracle 中 根据值 查询 所在 表和字段
-------------------- -- 这里是查询 数字型字段值 /*declare CURSOR cur_query IS select table_name, column_name, d ...
- ORACLE 通过数据值查找找表名和字段名
有时候,我们只知道数据值,但需要通过这个数据值去查找数据是存放在哪个表的哪个字段. DECLARE V_SQL VARCHAR2(2000); V_COUNT NUMBER; BEGIN FOR I ...
- oracle定义递减序列步长值,浅谈Oracle序列
Oracle是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一,而序列是一个计数器,它并不会与特定的表关联,通过创建Oracle序列和触发器实现表的主键自增. 序列一 ...
- Oracle序列使用:建立、删除
在开始讲解Oracle序列使用方法之前,先加一点关于Oracle client sqlplus的使用,就是如果执行多行语句的话一定要加"/"才能表示结束,并执行!本篇文章的主题是通 ...
- oracle+创建序列自增,oracle序列详解和建立自增主键
序列: 是oacle提供的用于产生一系列惟一数字的数据库对象.sql l 自动提供惟一的数值数据库 l 共享对象性能 l 主要用于提供主键值测试 l 将序列值装入内存能够提升访问效率spa 1.首先建 ...
- Oracle序列小结
定义: 序列是一个计数器(序列号生成器),可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字),是oracle提供的用于产生一系列唯一数字的数据库对象.通过创建oracle序列和触发器来实 ...
- oracle sql序列,SQL server 和Oracle 序列
1,SQL Server序列创建与使用 BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE name = 'event_seq') DROP SEQUENC ...
- oracle 序列详解
Oracle 序列详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用途是生成表的主键值, ...
- oracle序列累加循环,Oracle 序列的使用与说明
1.序列的创建与说明 创建序列,Oracle序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINV ...
最新文章
- WPF Layout System
- 一般源码安装添加的GD库 是不支持 jpeg 格式的图片的
- Android4.0 Launcher 源码分析系列(二)
- 5月23日任务 LAMP架构介绍、MySQL、MariaDB介绍、 MySQL安装
- linux 关闭打开的文件描述符,关闭它们后重新打开stdout和stdin文件描述符
- python自动注册邮箱_[转][Python][自动登录163邮箱]
- 亚马逊aws深度学习_AWS速查表:Amazon Web Services入门时首先要学习的5件事
- linux 内核空间与用户空间
- 关于qt中的tr( )函数
- Atitit. Atiposter 发帖机 新特性 poster new feature v7 q39
- 软件基本功:数组赋值,一定要对齐
- mix2线刷开发板救砖_小米小米Mix 2手机快速救砖,线刷教程分享,小白轻松救活手机...
- (转)在 Linux 平台中调试 C/C++ 内存泄漏方法
- 请每一个孝顺的子女耐心的看下去!
- Azure IoT Edge入门(2)部署一台Edge Device
- C语言经典例题-两个分数相加
- 基于工业智能网关的PLC远程控制解决方案
- 微信小程序引入weui的操作
- Java中的各种锁和数据库中的锁
- 打车软件盛行,如何判断是否拒载
热门文章
- RSA公私钥加解密方式-工具类
- 扩容是元素还是数组_Java中对数组的操作
- 【CodeForces - 705C】Thor(模拟,STLset优化链表)
- 特殊mac地址文档_Mac颜值秒杀Win10?五款神器让Win10化身macOS
- java 调用动态链接库_JAVA技巧:JNative调用动态链接库问题(SOS)
- 改变定时器获取传感器频度_广东梅州梅县压力传感器*校对
- java 截串_java字符串截取
- Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间
- leetcode6. Z 字形变换
- leetcode205. 同构字符串 一般人一次做不对的简单题