备注:此两种方案,都因为oracle内部字符函数的参数长度4000限制。
另外,个人测试,性能不如”将数据插入物理表再JOIN查询“或”每1000次ID做一次IN查询“的总的运行速度。
即ID的个数越多,这两种方案的总的运行效率越不好(总的耗时越多)。 

Solution 1: Use oracle Regex

select t1.field_01,t1.field_02

from t_XXX t1

where Exists

(

select 1 from

(

SELECT TRIM(REGEXP_SUBSTR (:v_id_list, '[^,]+', 1,rownum)) as ID

FROM DUAL

CONNECT BY ROWNUM <= LENGTH (:v_id_list) - LENGTH (REPLACE (:v_id_list, ',','')) + 1

)  tmp

where t1.ID= tmp.ID

);

------------------------------------------------------------------------------------------------------------

Solution 2: Use record type

Step1: create record type:

create or replace typemyTableType as table of varchar2 (32767);

----------------------------------------------

Step2:Create function that it convert string to datatable.

Create and replace function var_list(p_string in varchar2 ) return myTableType

as

l_string       long default p_string || ',';

l_data         myTableType := myTableType();

n              number;

begin

loop

exit whenl_string is null;

n := instr(l_string, ',' );

l_data.extend;

l_data(l_data.count) :=

ltrim( rtrim( substr( l_string, 1, n-1 ) ) );

l_string :=substr( l_string, n+1 );

end loop;

return l_data;

end;

----------------------------------------------

Step3: test example

select *

from THE

(

select cast( var_list('abc, xyz, 012') as

mytableType )from dual

) a

------------------------------------------------------

Step4: I Use in code, sql format

Note: :v_id_list’svalue is like :value_1,value_2,..,value_n. and n<=1000

select field_xxx01, t1.field_xxx02

from t_xxxx t1

where Exists

(

select 1 from THE

(

select cast( var_list(:v_id_list) as  --select cast( in_list('abc, xyz, 012') as

mytableType ) from dual

)  t2

where t1.field_ID = t2.COLUMN_VALUE

);

------------------------------------------------------ 
create or replace procedure p_getData_byMultiValue
(
   v_id_list in varchar2,
   v_cursor out sys_refcursor
)
is
begin  /* 
  open v_cursor  
  select *
    from THE
    (
             select cast( in_list(v_id_list) as  -- select cast( in_list('abc, xyz, 012') as
                              mytableType ) from dual 
    ) a; */      open v_cursor

  select *
    from T1     where Exists      (          select 1 from  
        (
             select cast( in_list(v_id_list) as  -- select cast( in_list('abc, xyz, 012') as
                              mytableType ) from dual 
         )  t2          where t1.ID = t2.COLUMN_VALUE    );

Oracle a Parameter with multi value的更多相关文章

  1. [转]Oracle Hidden Parameter:_allow_resetlogs_corruption

    本文转自eygle博客,原文地址:http://www.eygle.com/archives/2005/10/oracle_hidden_allow_resetlogs_corruption.html ...

  2. oracle db shutdown immediate–multi Instance

    [oracle@redhat4 ~]$ sqlplus / as sysdba@orcl SQL*Plus: Release 11.2.0.1.0 Production on Tue Oct 6 21 ...

  3. linux下单节点oracle数据库间ogg搭建

    环境说明:   linux为Linux 2.6.32-573.el6.x86_64     oracle为 11g Enterprise Edition Release 11.2.0.1.0 - 64 ...

  4. 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

    使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...

  5. Oracle连接数过多释放机制

    Oracle连接数过多释放机制  sqlplus /nolog   打开sqlplus          connect /as sysdba    使用具有dba权限得用户登陆oracle      ...

  6. Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration

    Installing and setting up Oracle GoldenGate connecting to an Oracle database Also please make sure t ...

  7. ORACLE数据库学习之体系结构

     Oracle体系结构 ORACLE数据库体系结构决定了oracle如何使用网络.磁盘和内存.包括实例(instance),文件(file)和进程(process不包括后台进程)三部分. 实例:每 ...

  8. Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load

    Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load 2018-06-07 00:514730原创GoldenGate 作者: leo 本文链接:https://w ...

  9. Oracle 11g 单实例到单实例OGG同步实施文档-RMAN 初始化

    Oracle 11g 单实例到单实例OGG同步实施文档-RMAN 初始化 2018-06-07 13:455170原创GoldenGate 作者: leo 本文链接:https://www.cndba ...

随机推荐

  1. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  2. JavaScript 中的类方法,对象方法,Prototype方法

    <script type="text/javascript"> function baseClass() { this.showMsg = function() { a ...

  3. 基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序

    1.字节顺序 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序.小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序是高字节数据存 ...

  4. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  5. react-native 学习之Image篇

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import Rea ...

  6. C语言 第七章 数组与字符串

    一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...

  7. 1Z0-053 争议题目解析505

    1Z0-053 争议题目解析505 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 505.You configured the default backup device type ...

  8. 【JUC】JDK1.8源码分析之LockSupport(一)

    一.前言 最开始打算分析ReentrantLock,但是分析到最后,发现离不开LockSuport的支持,所以,索性就先开始分析LockSupport,因为它是锁中的基础,是一个提供锁机制的工具类,所 ...

  9. 浅谈移动端之touch事件--手指的滑动事件

    今天台风‘海马’袭击深圳,全市停工.现分享一篇关于touch的文章,望指教! 原理: 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touch ...

  10. 【Python实战】Pandas:让你像写SQL一样做数据分析(二)

    1. 引言 前一篇介绍了Pandas实现简单的SQL操作,本篇中将主要介绍一些相对复杂一点的操作.为了方便后面实操,先给出一份简化版的设备统计数据: 0 android NLL 387546520 2 ...