From 4298986216ff89e4c7b4896b94b7fe9b4cb68f4c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 1 Oct 2017 22:41:55 +0800 Subject: [PATCH] Update Oracle --- .../Oracle/Insertable/OracleInsertable.cs | 14 +++++++-- .../Oracle/SqlBuilder/OracleInsertBuilder.cs | 31 ++++++++++++++++--- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs index b87cfd34f..2b83ab5ec 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs @@ -15,6 +15,10 @@ namespace SqlSugar { return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.IsValuable()).Select(it => it.OracleSequenceName).First(); } + protected List GetSeqNames() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.IsValuable()).Select(it => it.OracleSequenceName).ToList(); + } public override int ExecuteReturnIdentity() { InsertBuilder.IsReturnIdentity = true; @@ -22,12 +26,18 @@ namespace SqlSugar string sql = InsertBuilder.ToSqlString(); RestoreMapping(); var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); - var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : Ado.GetInt(" SELECT "+GetSeqName()+".currval FROM DUAL"); + var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName() ); return result; } + + private int GetSeqValue(string seqName) + { + return Ado.GetInt(" SELECT " + seqName+ ".currval FROM DUAL"); + } + protected override void PreToSql() { - var identities = GetIdentityKeys(); + var identities = GetSeqNames(); var insertCount = InsertObjs.Count(); InsertBuilder.OracleSeqInfoList = new Dictionary(); if (identities.IsValuable()&& insertCount > 1) diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs index 5bf0428f4..1ee2d1b62 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs @@ -12,13 +12,20 @@ namespace SqlSugar { get { - return @"INSERT INTO {0} + return @"INSERT INTO {0} ({1}) VALUES ({2}) "; } } + public override string SqlTemplateBatch + { + get + { + return "INSERT INTO {0} ({1})"; + } + } public override string ToSqlString() { var identities = this.EntityInfo.Columns.Where(it => it.OracleSequenceName.IsValuable()).ToList(); @@ -32,9 +39,10 @@ namespace SqlSugar if (isSingle) { string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.DbColumnName)); - if (identities.IsValuable()) { - columnsString = columnsString.TrimEnd(',') + "," + string.Join(",", identities.Select(it=> Builder.GetTranslationColumnName(it.DbColumnName))); - columnParametersString = columnParametersString.TrimEnd(',') +"," + string.Join(",", identities.Select(it =>it.OracleSequenceName+ ".nextval")); + if (identities.IsValuable()) + { + columnsString = columnsString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); + columnParametersString = columnParametersString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => it.OracleSequenceName + ".nextval")); } return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString); } @@ -45,6 +53,10 @@ namespace SqlSugar int pageIndex = 1; int totalRecord = groupList.Count; int pageCount = (totalRecord + pageSize - 1) / pageSize; + if (identities.IsValuable()) + { + columnsString = columnsString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); + } while (pageCount >= pageIndex) { batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString); @@ -57,13 +69,22 @@ namespace SqlSugar batchInsetrSql.Append(SqlTemplateBatchUnion); } var insertColumns = string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), Builder.GetTranslationColumnName(it.DbColumnName)))); + if (identities.IsValuable()) + { + insertColumns = insertColumns.TrimEnd(',') + "," + string.Join(",", identities.Select(it => + { + var seqValue = this.OracleSeqInfoList[it.OracleSequenceName]; + this.OracleSeqInfoList[it.OracleSequenceName] = this.OracleSeqInfoList[it.OracleSequenceName] + 1; + return seqValue + 1+" AS "+it.DbColumnName; + })); + } batchInsetrSql.Append("\r\n SELECT " + insertColumns + " FROM DUAL "); ++i; } pageIndex++; batchInsetrSql.Append("\r\n;\r\n"); } - return batchInsetrSql.ToString(); + return "BEGIN\r\n"+ batchInsetrSql.ToString()+"\r\nEND;"; } } }