''' <summary>

''' 在 oracle 里 , where in 语句有可能造成问题 : ORA-01795:列表中的最大表达式数为1000

''' 如果我们在拼接where in时,其item的个数超过1000,在sql执行时会抛出ORA-01795异常。

'''  下面这个函数对原来的字符串(比如:dim str = "1,2,3,4,5,6,7,...........,1001,1002")作处理

'''     dim strCondition = getWhereIn_ora01795("ALERT_ID",str, 999) , 处理后可以直接用在oracle

'''   where ALERT_ID in (" & strCondition & ")"

''' </summary>

''' <param name="_column">元素名</param>

''' <param name="strIDs">原始字符串,比如: 0,1,2,3,4,5,6,7,8,9 </param>

''' <param name="maxNumber">每个 or in 里面最多容许的元素数量 </param>

''' <returns></returns>

''' <remarks></remarks>

PrivateFunction getWhereIn_ORA01795(_column As String, strIDs As String, maxNumber As Integer) As String

Dim arr_IDs As String() = strIDs.Split(",") ' ID组成的 数组

' 假设 maxNumber 为 4

' 下面是转换的样式

' 0,1,2 ---> 0,1,2

' 0,1,2,3 ---> 0,1,2,3

If arr_IDs.Count <= maxNumber Then' 如果元素数量小于等于最大值

Return strIDs ' 原样返回

End If

' 现在知道元素数量 大于 最大值了,必须要做设置了

Dim strSql = arr_IDs(0).Trim ' sql语句, 从第0个元素开始

' 下面是几个转换的样式

' 0,1,2,3,4 ---> 0,1,2,3) or in (4

' 0,1,2,3,4,5,6,7,8,9 ---> 0,1,2,3) or in (4,5,6,7) or in (8,9

' 0,1,2,3,4,5,6,7,8,9,10,11 ---> 0,1,2,3) or in (4,5,6,7) or in (8,9,10,11

For ii = 0 To arr_IDs.Count - 1 ' 对于数组中的每个元素

If ii Mod maxNumber = 0 Then' 如果其序号 为4的倍数(0,4,8,12,。。。)

If ii > 0 Then' 如果其序号不是 0(其序号为 4,8,12。。。)

strSql &= ") or " & _column & " in (" & arr_IDs(ii).Trim

End If

Else' 如果其序号 不是4的倍数(1 2 3 5 6 7 9 10 11 。。。)

strSql &= ", " & arr_IDs(ii).Trim

End If

Next

Return strSql

End  Function

解决 ora-01795 的问题的更多相关文章

  1. ora 01795 in 1000 limit

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm https://docs.oracle.com/cd/ ...

  2. oracle学习 三(持续更新中)

    关于ora 01219问题的解决 之前学习oracle的时候练习去建立表空间,建了很多之后手动删除了,之后再使用自己创建的用户名登陆数据库就会造成数据库 ORA-01031: ORACLE initi ...

  3. [20180926]神奇的规避ORA-01795方法.txt

    [20180926]神奇的规避ORA-01795方法.txt --//大家知道in里面的值限制1000个值,如果超出报ORA-01795错误. D:\> ooerr 0179501795, 00 ...

  4. plsql在64位机器下读取tnsname.ora 及oracle_home异常的解决办法

    问题是: 我在自己电脑(win7  64bit)上安装了oracle的64位数据库   通过sqlplus能正常连接 主要是安装pl/sql时   我是这样安装的1.在网上下载了个instantcli ...

  5. oracle xe client 如何设置 tnsnames.ora(解决无法使用pl/sql developer的问题)

    10.2版本xe的服务器和客户端安装都很方便,由于xe的服务器只允许建立一个实例,实例名字会直接默认为xe,客户端默认安装在C:\XEClient目录下,使用sqlplus连接服务器: sqlplus ...

  6. PLSQL Developer概念学习系列之登录连接Oracle时出现(没有登录) -PL / SQL Developer:ORA - 12541: TNS :无建听程序的错误解决办法(图文详解)

    不多说,直接上干货! 前期博客 PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)   如用scott.scott_password进行登录,orcl是全局数据库 ...

  7. 修改tnsnames.ora文件中配置内容中的连接别名后,连接超时解决办法

    1.tnsnames.ora文件中配置内容中的连接别名:由upaydb修改为IP地址 2.连接超时 定位原因: PLSQL登录界面的数据库列表就是读的tnsname.ora中连接的别名,这个文件中连接 ...

  8. 【ORA】ORA-39002,ORA-39070,ORA-29283, ORA-06512,ORA-29283解决办法

    今天使用IMPDP导入的时候报了一个错误 ORA-39002: invalid operation  ORA-39070: Unable to open the log file.  ORA-2928 ...

  9. 【ORA】Specified value of MEMORY_TARGET is too small, needs to be at least 3072M解决办法

    今天安装EM12C的时候遇到了一个报错: 修改好数据库中的参数大小后,重新启动报错 Specified value of MEMORY_TARGET is too small, needs to be ...

  10. 【ORA】ORA-01078和LRM-00109 解决方法

    今天切换到asm实例的时候,发现是一个空实例,尝试启动实例,结果报错ORA-01078和LRM-00109 SQL> startupORA-01078: failure in processin ...

随机推荐

  1. Redis缓存穿透,缓存击穿,缓存雪崩,热点Key

    导读 使用Redis难免会遇到Redis缓存穿透,缓存击穿,缓存雪崩,热点Key的问题.有些同学可能只是会用Redis来存取,基本都是用项目里封装的工具类来操作.但是作为开发,我们使用Redis时可能 ...

  2. java jdb

    https://stackoverflow.com/questions/8155253/how-do-i-compile-in-debug-mode-netbeans-java-maven <p ...

  3. 架构设计系列-前端模式的后端(BFF)翻译PhilCalçado

    本文翻译自PhilCalçado的官网:https://philcalcado.com/2015/09/18/the_back_end_for_front_end_pattern_bff.html 对 ...

  4. mybaties报错:There is no getter for property named 'table' in 'class java.lang.String'

    报错是由于xml里获取不到这个table参数 package com.xxx.mapper; import java.util.List; import org.apache.ibatis.annot ...

  5. VS 中批量格式化、删除未使用的 using 语句代码的插件

    插件名称:Format All Files 插件地址:https://marketplace.visualstudio.com/items?itemName=munyabe.FormatAllFile ...

  6. 禁止直接通过IP访问--->nginx

    在nginx.conf 中添加 server{ listen 80 default_server; return 501; } 注: nginx加载include是按顺序,如果是文件夹,就是文件顺序, ...

  7. python with语句与contextlib

    参考链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/ with语句用于异常处理,适用于存在资源访问的场合,无论 ...

  8. 利用Java EE里jsp制作登录界面

    jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...

  9. 《深入理解Java虚拟机》并发(第12~13章)笔记

    volatile关键字的作用 所有变量的可见性--仅仅是修改后的值的可见性,不保证并发修改时新值和预期一致.即只保证读,不保证写. 禁止指令重排序--修饰的变量,读写不会指令重排.如变量isReady ...

  10. .NET同一个页面父容器与子容器通信方案

    主界面: 关键主页面代码: <div id="EditDiv"> <iframe src="javascript:void(0)" id=&q ...