Oracle支持批量操作方案

Oracle支持批量操作方案

方案管理

变更记录

日期(Date) 作者(Author) 旧版本(Old Version) 新版本(New Version) 备注(Remarks)

审阅记录

日期(Date) 姓名(Name) 职务(Position) 版本(Version) 签字(Signature)

一、方案简介

  • 方案背景
    • 目前项目版本为.NET5 ,没有适配的对应Oracle环境的批量插入的扩展,为了实现在项目中对oracle环境的批量操作的功能

二、方案目标

  • 具体目标
    • 实现在.NET5项目环境下对Oracle数据库进行批量插入修改删除操作
  • 意义
    • 提高项目在大数据进行功能操作时的性能

三、准备工作

  • **时间:**2月7日 09:00
  • 参与人:
    • 审核者与方案制定
      • @** @**
    • 方案实施者
      • @**
    • 方案验收者
      • @** @**
  • 资料支持
    • EFCore.BulkExtensions包支持.NET6版本源码
    • FreeSql中oracle批量插入的实现
      • 源码地址
      • 文档地址
    • oracle的OracleBulkCopy使用
      • https://www.bbsmax.com/A/RnJWK41EJq/
      • https://blog.csdn.net/baidu_27474941/article/details/71712295
    • ORACLE的SQL语句
      • oracleSql中merge语法借助资料
        • 资料链接
      • oracleSql中临时表创建借助资料
        • 资料链接
        • 创建临时表
          • -复制现有表创建临时表CREATE GLOBAL TEMPORARY TABLE newTableName ON COMMIT PRESERVE ROWS AS SELECT* FROM existingTableName WHERE 1 = 2;
        • 有异常处理删除临时表
          • BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE tableName'; EXECUTE IMMEDIATE 'DROP TABLE tableName PURGE'; EXCEPTION WHEN OTHERS THEN NULL;END;

四、计划安排

  • 人天安排
    • Oracle批量操作方案
    • **EFCore.BulkExtensions**开源库.Net6版本适配Oracle的操作
    • .NET6完成批量实现迁移到.NET5版本**EFCore.BulkExtensions**开源库及.NET5环境的适配
      • Oracle、Mysql、PostgreSql
    • 发布批量操作的私有包
    • .NET5版本批量操作发出Nuget包,项目中使用发布的私有包进行测试
      • Oracle、Mysql、PostgreSql

五、方案实施

  • 具体细节
    • 分析**EFCore.BulkExtensions**开源库.Net6版本的SqlServer批量实现方式
    • 通过.NET6版本SqlServer的实现完成对Oracle的批量实现方式
    • 对在.NET6完成ORACLE 进行批量增删改实现
    • .NET6批量实现迁移到.NET5版本**EFCore.BulkExtensions**开源库的分支,做.NET5环境的适配
      • Oracle、Mysql、PostgreSql 数据库的支持
    • 对迁移到.NET5版本的Oracle批量操作私有Nuget包。名称**GCT.EFCore.BulkExtensions**
    • 在项目中使用发布的包进行测试

六、风险评估

  • 可能会出现的难点
    • oracle的OracleBulkCopy使用方法
    • ORACLE的SQL语句不熟悉
    • .NET6环境迁移到.NET5环境会存在方法等多种不适配的问题
      • Oracle
      • Postgresql
      • Mysql
  • 风险评估

七、注意事项

  • .Net6**EFCore.BulkExtensions**开源库拥有PostgreSql和MySql的适配,需要迁移做.NET5的适配

八、验收标准

  • 验收对象
    • medpro产品组
  • 验收前提条件
    • 已发布私有包完成
  • 验收方法
    • 检验medpro产品使用到批量操作的事务操作
  • 验收标准
    • 事务操作成功

九、补充方案(备用方案)

  • 项目后续如果需要适配其他国内的数据库,基于**EFCore.BulkExtensions** 包耦合性深,进行扩展其他数据库会出现一些其他异常,是否考虑搭建公司内部私有数据库批量操作库?
  • 通过现有开发完成的.NET5的oracle提交PR给官方开源库,后续使用开源包