`
阅读更多
         
      需求:用户导入100万白名单,如果该导入的白名单存在于数据库中,就不执行白名单导入功能。所以要对该导入白名单与数据库进行比对,将不再白名单中的数据传入。

   单次10000个白名单批量插入前,将其过滤,单次操作session 开启时间不会太长,数据压力不大,session系统数量可以保证。
   
     该过滤功能逻辑很简单,下面贴出管道表函数在java中的灵活运用
1)构建一个rowtype 这个row type 与java中传入的数组中单条数据结构保持一致
create or replace type MdnUser_row_type as object
(
mdn VARCHAR(15),
mdnOwner VARCHAR(20),
whiteid VARCHAR(20),
batchid VARCHAR(20),
status VARCHAR(20),
addTIME VARCHAR(20)
)
2)定义自定义数组table 类型
CREATE OR REPLACE TYPE MDNUSER_TABLE_TYPE AS TABLE OF MdnUser_row_type

3)构建管道表函数
create or replace function fn_to_table(MdnUser_TABLE IN MdnUser_TABLE_TYPE )
return MdnUser_TABLE_TYPE PIPELINED
as
MdnUser_row MdnUser_row_type ;
BEGIN
for i in 1..MdnUser_TABLE.count LOOP
MdnUser_row := MdnUser_TABLE(i);
PIPE ROW (MdnUser_row);
END LOOP ;

RETURN ;
end;

4)组装sql
  String tblName = "NM_NET_USER_" +spid;
  StringBuffer sb = new StringBuffer("");
  sb.append("SELECT TEMPTBL.MDN ,TEMPTBL.MDNOWNER ,TEMPTBL.WHITEID, ");
  sb.append("TEMPTBL.BATCHID,TEMPTBL.STATUS,TEMPTBL.ADDTIME ");
  sb.append("FROM TABLE(FN_TO_TABLE(?)) TEMPTBL WHERE NOT EXISTS ");
  sb.append("(SELECT U.MDN FROM "+tblName+" U WHERE U.MDN = TEMPTBL.MDN)") ;
  return sb.toString();


5)数据访问部分代码
   conn = conn.getMetaData().getConnection();
   ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("MDNUSER_TABLE_TYPE", conn);
   oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc, conn,userArray);
   pstmt = conn.prepareStatement(sqlQuery);
   pstmt.setArray(1, array);
   rs = pstmt.executeQuery();

6) 说明

  TABLE(FN_TO_TABLE(?))   管道表函数可以在sql中直接调用
  conn = conn.getMetaData().getConnection();
  hibernate session 获得的connection 无法直接向  oracle.jdbc.OracleConnection转型 ,要特出处理
  MDNUSER_TABLE_TYPE
  一定要大写 保持与数据库中type一致
  oracle.sql.ARRAY array = new oracle.sql.ARRAY(arrayDesc, conn,userArray);
  将java 数组转换为oracle 数组

3
2
分享到:
评论

相关推荐

    Oracle数据表更新即时通告的实现方法.pdf

    然而,Java在处理大量即时通信数据时效率较低,而C/C++函数的调用需要在数据库服务器中设置,相对复杂。 实现Oracle数据表更新的即时通告,可以选择使用命名管道和实时信号机制。命名管道提供了一种进程间的通信...

    Oracle PLSQL最佳实践 第二版

    6. **表函数和管道函数**:理解如何通过表函数返回多行结果,以及如何使用管道操作符将结果流式传输到其他查询中。 7. **包**:学习如何组织相关的PL/SQL对象(如过程、函数和变量)成一个包,以提高代码的复用性...

    在Oracle数据库中运行操作系统命令

    在Oracle数据库中运行操作系统命令是特定场景下的需求,例如在Oracle 8i...在较新的Oracle版本中,更推荐使用其他更安全的方法,如使用Oracle的External Procedures或者通过Java Stored Procedures来执行操作系统命令。

    官网下载java 64位1.8版本JDK

    3. **Lambda表达式**:Lambda表达式是Java 8中的一个核心特性,它提供了一种简洁的方式来表示匿名函数,简化了处理函数接口和回调函数的代码。 4. **方法引用**:方法引用允许直接引用已有方法,而不是通过lambda...

    进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,

    编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时, 在系统中有一个父进程和两个子进程活动。 让每一个进程在屏幕上显示一个字符:父进程显示“A”; 子进程分别显示字符“b”和“c”。试观察记录...

    JNI,Webservice WIN32API等网络编程

    **示例**: 通过WebService调用Oracle数据库,可以将数据库的操作封装成服务,客户端通过网络请求调用这些服务,从而实现对数据库的访问。 #### 三、WIN32API WIN32API是Windows操作系统提供的API集合,它提供了...

    java面试宝典,工作经验汇总

    理解类与对象的关系,掌握构造函数、访问修饰符、抽象类和接口、内部类的使用,以及如何实现多态性,是进阶Java开发者的关键。 3. **集合框架**:Java集合框架包括List、Set、Map接口及其实现类,如ArrayList、...

    疯狂JAVA讲义

    学生提问:为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过? 150 5.7 多态 151 5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 ...

    java面试宝典-自用

    15. **新特性**:掌握Java的新版本特性,例如Java 8的Lambda表达式、函数式接口、Stream API,以及Java 11和14等更高版本的特性。 通过深入理解和熟练应用这些知识点,你将能够更好地应对Java开发岗位的面试挑战,...

    PLSQL高级编程

    本书可能介绍了如何编写调试程序包,以及如何调用函数进行调试。 5. 大对象类型。大对象(LOB)是Oracle数据库中用来存储大量的二进制数据或文本数据的数据类型,包括BLOB、CLOB、NCLOB、BFILE等。书中可能详细讲解...

    JAVA認證課程

    Java认证课程,全称为Sun Certified Programmer for the Java 2 Platform, Standard Edition (SCJP),是Oracle公司提供的针对Java编程语言的官方认证。这个课程旨在帮助开发者掌握Java编程基础,理解核心概念,以及...

    jdk8安装包,方便java开发者

    JDK8是Oracle公司发布的一个重要版本,它引入了许多新特性,对Java语言进行了重大改进,极大地提升了开发效率和程序性能。以下是对JDK8中关键知识点的详细讲解: 1. **Lambda表达式**:JDK8引入了lambda表达式,这...

    达内学习笔记,java, Core c++ , Unix

    Java是一种广泛应用的面向对象的编程语言,由Sun Microsystems(现为Oracle Corporation)开发。它的设计目标是有着严格的类型检查、垃圾回收机制、并且可以编写一次,到处运行。Java的核心特性包括: 1. **面向...

    JAVA JDK8-讲解和使用

    2. **函数式接口**:为了支持Lambda,Java引入了函数式接口的概念。这些接口只有一个抽象方法,如`Runnable`、`Callable`和新添加的`Consumer`、`Supplier`、`Function`等。它们是Lambda表达式的目标类型,使得...

    jdk1.8 中文版api

    JDK 1.8,也被称为Java Development Kit的第八个主要版本,是Oracle公司发布的一个重要更新,为Java开发者提供了许多新特性、改进和优化。这个版本的API文档以中文版的形式提供,大大便利了中国开发者对Java技术的...

    常见的java面试笔试题大汇总

    Java是一种面向对象的、跨平台的、高性能的编程语言,由Sun Microsystems(现属Oracle)开发。 - Java的特点:简单性、面向对象、健壮性、安全性、可移植性、高性能、多线程、动态性等。 2. **数据类型与变量** -...

    达内培训笔记(Core Java,C++,UniX)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems开发,现在由Oracle公司维护。Core Java是Java的基础,它包含了Java语言的核心概念和技术。以下是一些Java核心知识的关键点: 1. **基本语法**:Java的...

    instantclient

    4. **PL/SQL支持**:对于PL/SQL过程、函数和包的调用,Instantclient也能提供支持,使得开发者可以充分利用Oracle的存储过程和触发器等功能。 5. **性能优化**:由于Instantclient只包含必要的组件,因此它的体积较...

    C++学习步骤

    4. **Java调用C/C++**:学习如何让Java代码调用C/C++函数。 #### 五、数据库操作 **目标:** 掌握Oracle数据库的基本操作和SQL编程能力。 1. **Oracle数据库安装部署**:学习如何安装和部署Oracle数据库。 2. **...

Global site tag (gtag.js) - Google Analytics