解决 ora-01795 的问题
''' <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
最新文章
- UWP开发:APP之间的数据交互(以微信为例)
- excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法
- linux常用命令之查阅文件
- mysql将int 时间类型格式化
- 内部类&;匿名内部类
- RxJava 平常使用
- C# 配置文件读取与修改
- JAVA学习第四十七课 — IO流(一):文件的读写
- samba服务器上文件名大小写
- rebase
- CSharp笔记>;>;>;多语言,注册
- 如何用C#寻找100到999的所有水仙花数?
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- MySQL8主从配置
- Faster R-CNN:详解目标检测的实现过程
- centos6安装ElasticSearch5.6.5错误记录
- [转] Entity Framework 无法加载指定的元数据资源。
- Atcoder #014 agc014_D 树形DP+nim变形
- js中的数组对象排序
- JavaScript (预热)