From 48ef7a8165eb3d3c730f8101e689c38f6bc22f48 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 11 Dec 2022 18:15:13 +0800 Subject: [PATCH] Update Oracle in number >1000 --- .../SqlBuilderProvider_Condition.cs | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs index 95f9c3299..334ea5560 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs @@ -245,11 +245,18 @@ namespace SqlSugar parameters.Add(new SugarParameter(parameterName, item.FieldValue)); } - private static void In(StringBuilder builder, ConditionalModel item, string type, string temp) + private void In(StringBuilder builder, ConditionalModel item, string type, string temp) { if (item.FieldValue == null) item.FieldValue = string.Empty; var inValue1 = string.Empty; - inValue1 = In_GetInValue(item); + var inArray=item.FieldValue.Split(','); + var pageSize = 1000; + if (inArray.Length > pageSize&&this.Context.CurrentConnectionConfig.DbType==DbType.Oracle) + { + InBig(builder,item,type,temp,inArray, pageSize); + return; + } + inValue1 = In_GetInValue(item, inArray); if (item.CSharpTypeName.HasValue() && UtilMethods.IsNumber(item.CSharpTypeName)) { inValue1 = inValue1.Replace("'", ""); @@ -273,16 +280,38 @@ namespace SqlSugar builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "IN", inValue1); } - private static string In_GetInValue(ConditionalModel item) + private void InBig(StringBuilder builder, ConditionalModel item, string type, string temp, string[] inArray, int pageSize) + { + var sqlList = new List(); + this.Context.Utilities.PageEach(inArray, pageSize, items => + { + if (item.CSharpTypeName.EqualCase("string") || item.CSharpTypeName == null) + { + sqlList.Add("(" + item.FieldName.ToSqlFilter() + " IN (" + items.Distinct().ToArray().ToJoinSqlInVals() + "))"); + } + else + { + sqlList.Add("(" + item.FieldName.ToSqlFilter() + " IN (" + items.Select(it => it == "" ? "null" : it).Distinct().ToArray().ToJoinSqlInVals() + "))"); + } + }); + var inValue1 = $" {string.Join(" OR ",sqlList)} "; + if (item.CSharpTypeName.HasValue() && UtilMethods.IsNumber(item.CSharpTypeName)) + { + inValue1 = inValue1.Replace("'", ""); + } + builder.AppendFormat(temp, type, "", " ", inValue1); + } + + private static string In_GetInValue(ConditionalModel item,string[] inArray) { string inValue1; if (item.CSharpTypeName.EqualCase("string") || item.CSharpTypeName == null) { - inValue1 = ("(" + item.FieldValue.Split(',').Distinct().ToArray().ToJoinSqlInVals() + ")"); + inValue1 = ("(" + inArray.Distinct().ToArray().ToJoinSqlInVals() + ")"); } else { - inValue1 = ("(" + item.FieldValue.Split(',').Select(it => it == "" ? "null" : it).Distinct().ToArray().ToJoinSqlInVals() + ")"); + inValue1 = ("(" + inArray.Select(it => it == "" ? "null" : it).Distinct().ToArray().ToJoinSqlInVals() + ")"); } return inValue1;