''' <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. nginx 日志配置log_format用法

    nginx服务器日志相关指令主要有两条: 1.一条是log_format,用来设置日志格式: 2.另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_ ...

  2. VS工具箱不显示DEV控件解决方法

    VS工具箱中不显示DEV控件解决方法 之前先装vs,再装dev控件,vs工具栏中自动会加载并显示dev相关组件,但是,在更新vs(我用2017版)后,原先安装好的dev控件库不显示在vs的工具栏中了. ...

  3. 高性能TcpServer(C#) - 1.网络通信协议

    高性能TcpServer(C#) - 1.网络通信协议 高性能TcpServer(C#) - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpS ...

  4. SQLMap常用教程

    先安装 python环境(2.6.x或2.7版本) ,再将SQLMap 放在安装目录下 注意:sqlmap只是用来检测和利用sql注入点的,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql ...

  5. Unable to parse composition

    Unable to parse composition When i tried to load gif to my project suddenly return me error: Java.La ...

  6. mac下安装php7.2、mysql5.7、nginx环境

    本篇文章是通过homebrew安装,home brew对于Mac相当于centos 的yum一样方便简单,大家可以先去安装home brew.网上很多简单靠谱的例子,这里不写了 一.准备条件为了安装最 ...

  7. mockjs 在项目中vue项目中使用

    一.为什么要使用mockjs 总结起来就是在后端接口没有开发完成之前,前端可以用已有的接口文档,在真实的请求上拦截ajax,并根据mockjs的mock数据的规则,模拟真实接口返回的数据,并将随机的模 ...

  8. 深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数

    1.组件中数据的存放 ***(重点)组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data属性. 只是这个data属性必需是一个函数,而这个函数返回一个对象,这个对象里面存放着组件的数据 ...

  9. HeadFirst设计模式---装饰者

    定义装饰者模式 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案.这句话摘自书中,给人读得很生硬难懂.通俗地来说,装饰者和被装饰者有相同的父类,装饰者的行为组装着 ...

  10. java查看进程:jps命令

    java查看进程:jps命令 jps(Java Virtual Machine Process Status Tool) 是JDK .5提供的一个显示当前所有java进程pid的命令,简单实用,非常适 ...