结论:我们需不需要像存储过程一样的跨数据库过程

经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:

1、跨数据库:即允许在多个数据库上运行。

2、可读性强:可读性强,入门的成本低,开发人员容易接受。

3、效率高:主要分两部份,开发的效率及运行的效率,在两都之间达到平衡。

4、即时运行:以脚本化的方式运行。

 

实现的方案如下:

1、将SQL92关键字对象化。

2、扩展SQL92标准,支持如:@等关键用法。

 

用例如下:

1、关键字对象化:

UserInfo是一个用户对象:主要属性有用户代码、用户名称、性别、年龄,部门id (外键)等。

Dep是一个部门对象:含部门的相关信息。

isNullNotCondition是一个自定函数,如果部门名称为空,不做为条件。

Select(UserInfo.class,"DEP_NAME") .from(UserInfo.class)

                                                        .innerJour(Dep.class)

                                                        .on("UserInfo.dep_id=Dep.dep_id");

                                                        .where()

                                                        .and("UserInfo.dep_id=:id")

                                                        .or(isNullNotCondition("Dep.dep_name=:name"));

 

动态SQL语句:

SQL = "select user_code,user_name,sex,age,dep_id,dep_name "+

           "          from UserInfo"+

           "          innerJour Dep "+ 

           "          on (user_info.dep_id=Dep.dep_id" +

           "          where userInfo.dep_id=:id"+

           "          @isNullNotCondition(and Dep.dep_name=:name)";

封装的集合如下:

1、创建临时表

2、Insert、Update、Delete、Select语句。

3、根据数据库生成Java对象,java对象与数据库一一对应该。

附上SLQ92语法表:

 

Command: SELECT query

Description: Retrieve rows from a table or view

   SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]

        expression [ <![AS]> name ] [,...]

        [ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ]

        [ FROM {table | (select query)} [ alias ] [,...] ]

        [ {{LEFT | RIGHT} [OUTER] | NATURAL |[FULL] OUTER} JOIN table alias

        {ON condition | USING(col1,col2,...)} ]

        [ WHERE {condition | EXISTS (correlated subquery)} ]

        [ GROUP BY column [,...] ]

        [ HAVING condition [,...] ]

        [ { UNION [ ALL ] | INTERSECT | EXCEPT | MINUS } select ]

        [ ORDER BY {column | int} [ ASC | DESC | USING operator ] [,...] ]

        [ FOR UPDATE [ OF class_name [,...] ] ]

        LIMIT { count | ALL } [ { OFFSET | ,} start ]

Command: DELETE

Description: Removes rows from a table

   DELETE FROM table [ WHERE condition ]

<!--EndFragment-->

Command: INSERT

Description: Inserts new rows into a table

   INSERT INTO table [ ( column [, ...] ) ]

        { VALUES ( expression [, ...] ) | SELECT query }

 

 

Command: UPDATE

Description: Replaces values of columns in a table

   UPDATE table SET col = expression [,...]

        [ FROM fromlist ]

        [ WHERE condition ]

 

最近一段时间终于发现了一个项目,与本人的想法十分附合,只不够它的语法恶心的点。

jOOQ项目,大家可以关注一下。

SQL MINUS 实战指南:集合差集原理、NULL处理与跨数据库替代方案 SQL MINUS 并非数值减法,而是基于集合论的差集运算,其核心在于去重、NULL敏感比较与隐式排序。理解 MINUS 的执行原理,有助于规避金融、风控等强一致性场景中因隐式去重、NULL静默过滤或类型不匹配导致的数据核对偏差。它在 Oracle 中原生支持,而 PostgreSQL 和新版 MySQL 使用语义一致的 EXCEPT,MySQL 旧版本则需 LEFT JOIN 或 NOT EXISTS 等 ANSI 兼容方案实现等价逻辑。掌握 MINUS 的性能边界(如大表哈希匹配成本、LOB字段限制)及 阅读详情

相关推荐

SQL DATEDIFF函数实战:高效计算海量用户生存天数

在数据库开发与数据分析领域,日期计算是处理时间序列数据的基础操作,其核心原理在于对两个时间点之间的差值进行量化。通过数据库内置的日期函数,如DATEDIFF,可以在数据库层直接完成高效的集合运算,这体现了‘计算向数据移动’的技术价值,能显著减少网络传输开销并充分利用数据库的优化引擎。这一技术广泛应用于用户画像分析、会员生命周期统计、运营活动(如用户活跃天数勋章)等需要处理海量数据的场景。本文聚焦于使用SQL DATEDIFF函数,解决‘计算每一个用户从出生到现在的总天数’这一典型需求,并深入探讨了在面对百万

ctk87443的博客 360

Informix创建执行和删除带参数的存储过程实例

Informix创建执行和删除带参数的存储过程实例

xqf222的专栏 3949

SQL REPLACE()函数实战指南:数据清洗与字符串替换核心技术

REPLACE()是SQL中最基础且高频的字符串操作函数,属于数据库文本替换与数据清洗的核心能力。其原理是逐字符精确匹配并全局替换,不依赖正则、无需额外扩展,具备跨数据库兼容性(MySQL/PostgreSQL/SQL Server/Oracle均原生支持)。技术价值在于低门槛、高确定性、强可审计性——相比Python脚本或ETL工具,它能用一行SQL完成实时预览与批量修正,显著降低调试成本、沟通歧义和长期维护风险。典型应用场景包括HTML实体转义清理、字段格式标准化(如电话号去符号)、业务状态统一(如OB

436

低代码平台的性能突围:独立数据库 + 存储过程驱动的新范式

低代码平台面临开发效率与运行性能的平衡难题。该文提出采用独立数据库模式确保租户隔离性能,以存储过程为核心执行模型提升数据库操作效率,并构建包含版本控制、批量升级等功能的治理体系。通过行业内置业务模板和实际案例验证,平台实现了从工具到行业解决方案的升级。未来将结合AI与云原生技术进一步优化,推动低代码向高性能、易治理方向发展,满足核心业务需求。

nbsaas-boot基于Request-Response的企业级快速开发框架 1070

SQL SUM函数三大实战场景:累计求和、滚动求和与多列合成求和

SUM() 是 SQL 中最基础却最容易误用的聚合函数,其本质并非简单加法,而是依赖空值处理、分组上下文和计算粒度的语义化汇总操作。理解 SUM 的原理,是构建可靠数据分析逻辑的前提——它决定着销售额统计是否漏掉赠品订单、累计GMV能否按业务时序准确递进、滚动窗口是否真正覆盖‘近7天’而非‘前7行’。尤其在涉及 NULL 值参与运算(如 quantity * price)、多列组合计算(如 opening_qty + in_qty - out_qty)以及窗口函数扩展(累计/滚动求和)时,错误常源于语义认知

weixin_34162228的博客 407

拆解英飞凌CoolGaN:如何用Silvaco TCAD仿真评估功率GaN HEMT的关键性能(BV、Qg、开关损耗)

本文详细解析了如何使用Silvaco TCAD仿真工具评估英飞凌CoolGaN功率GaN HEMT的关键性能指标,包括击穿电压(BV)、栅电荷(Qg)和开关损耗。通过精确建模极化效应、优化边缘终端结构以及高频开关损耗仿真技术,为功率器件工程师提供了一套完整的'设计-仿真-验证'方法论,助力GaN HEMT在快充、数据中心电源等领域的应用。

weixin_29159995的博客 429

编程语言与存储过程:业务处理的速度与取舍

本文探讨了企业系统中业务逻辑实现的两种主流方式:存储过程和应用层编程语言的优劣势对比。从性能角度看,存储过程在减少网络延迟、执行计划缓存和原子事务方面具有优势,尤其适合金融、电商等高并发交易场景。而编程语言在灵活性、可维护性、跨数据库兼容性和扩展性方面更胜一筹。随着微服务架构兴起,存储过程使用减少,但在高一致性事务系统中仍不可替代。建议根据业务需求选择:存储过程适合单库复杂事务,编程语言适合复杂业务和分布式系统。未来数据库与应用的边界模糊可能带来存储过程的新机遇。

nbsaas-boot基于Request-Response的企业级快速开发框架 585

告别MATLAB环境!保姆级教程:用Application Compiler把你的GUI程序打包成独立exe(2020R版本实测)

本文详细介绍了如何使用MATLAB的Application Compiler工具将GUI程序打包成独立exe文件,特别针对2020R版本进行实测。从技术原理、配置详解到打包实战与问题排查,提供完整的解决方案,帮助开发者实现无需MATLAB环境的程序分发,提升工作效率。

weixin_30571465的博客 274

编程语言与存储过程:逻辑处理的取舍与高并发应对策略

在现代软件开发中,业务逻辑的处理可以通过编程语言(如 Java、Python)或者存储过程(如 MySQL 的存储过程)来完成。如何选择以及如何在高并发场景下优化系统性能,常常是架构设计中的关键问题。本文将分析两种方式的优劣,并提出应对高并发的实践建议。

nbsaas-boot基于Request-Response的企业级快速开发框架 743

如何利用CANoe在两路CAN通道之间创建网关(gateway)

CANoe网关,利用CAPL实现CAN转发

Richy_Lai的博客 7901

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案

本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。

weixin_32006655的博客 283

mysql建表如果存在删除吗_创建表之前判断表是否存在,如果存在则删除已有表...

创建表之前判断表是否存在,如果存在则删除已有表在sqlserver中,创建表之前判断表是否存在,如果存在则删除已有表Sql代码 www.2cto.com----SQL-Serverif exists (select 1from sysobjectswhere id = object_id('EMP')and type = 'U')drop table S_Evaluatego--CR...

weixin_32019361的博客 1357

达梦DM8整合Seata AT模式实战:手把手教你搞定分布式事务(含源码修改避坑)

本文详细介绍了达梦DM8数据库与Seata AT模式的深度整合实战,包括环境准备、架构设计、源码适配及分布式事务落地。通过独创性源码改造,解决了Seata官方对达梦数据库AT模式支持的限制,为国产数据库在微服务架构中的应用提供了可靠的事务保障。

weixin_30764771的博客 333

替换SqlServer可能比换Oracle更难

国产化的替代的现状根本不像很多专家所说的已经基本完成了,只有大家融入到具体一线,通过一线的实践和观察得出的结论才更为准确。以Sqlserver为例,之前国产化大多是靠对Oracle的兼容完成的数据库迁移,如达梦\OB等国产库,能够达到90%甚至更好的兼容性,但是有哪个国产库能够兼容SqlServer语法、系统表、以及存储过程呢?如果兼容性不行,如何进行迁移?要知道很多SqlServer2000还在用啊,这说明数据库的粘性太大了,不是说放弃就放弃,说重构就重构的。欢迎大家分享您的一线经验,一起讨论。

DeskUI 644

AOI检测总误判?五大常见问题与实战解决方案

通过对图像质量、检测程序、外界干扰、算法优化以及设备维护和校准的全面把控,企业可以有效降低误判率,提升AOI检测的准确性和可靠性,为工业生产提供更有力的质量保障。表现描述:在AOI检测时,元器件字符因印刷颜色深浅、模糊或受到灰尘干扰等差异,再加上元件库参数未根据实际生产优化,会使系统误将合格元件判定为不合格,严重影响生产效益和产品质量。优化元件库:着重检测关键差异字符,如型号编码等关键信息,剔除不必要字符的检测项,减少干扰,专注于关键识别的准确性。检测时,根据物料信息动态更新检测参数,使系统适应物料变化。

ALeader_AOI的博客 3499

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6491

hibernate+MySQL性能测试

一、简介 测试hibernate+MySQL在不同情况下,分别插入1万、5万、10万、30万条数据花费的时间。 运行环境:Windows7(8核,4G) 软件环境:Eclipse(Tomcat7,Debug模式)、JDK1.7、hibernate4.3.6 数据库:Mysql5.5.28 * 存储过程(java调用)的作用:插入单条数据,由java循环调用

congzi0424的专栏 1108

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SaaS 系统业务逻辑处理方式探讨

本文将从性能、可维护性、扩展性等方面分析各自的优劣,并探讨如何选择最优方案。系统时,业务逻辑的处理方式至关重要。(避免 API 调用导致的事务不一致),但仅限于批量计算,避免过度依赖。(订单管理、权限控制、支付流程)(拆分独立业务,提高可扩展性)(消息队列、批量数据处理)(机器学习模型训练、推理)(数据处理、清洗、转换)(支付、物流、CRM)(数据一致性要求高)

nbsaas-boot基于Request-Response的企业级快速开发框架 549

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[技术痛点]CallableStatement.getUpdateCount()跨驱动行为不一致问题解决方案与兼容性适配指南

在Java数据库编程中,CallableStatement(存储过程调用专用接口)的getUpdateCount()方法用于返回SQL语句执行后影响的行数。然而在PostgreSQL JDBC驱动环境下,当执行无返回结果集的存储过程时,该方法始终返回0,而在其他主流数据库驱动中通常返回-1。这种差异会导致跨数据库应用在迁移时出现兼容性问题。 ### 代码示例:现象复现 ```java // 典

gitblog_00578的博客 545

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

创建表之前判断表是否存在,如果存在则删除已有表

创建表之前判断表是否存在,如果存在则删除已有表 创建表之前判断表是否存在,如果存在则删除已有表在sqlserver中,创建表之前判断表是否存在,如果存在则删除已有表Sql代码 www.2cto.com ----SQL-Server if ex...

aizhejuan4396的博客 1249

主流数据库DBLink功能深入研究:从基础到高级应用

与Oracle不同,MySQL本身并不直接支持DBLink功能。联邦存储引擎(Federated Storage Engine):允许在一个MySQL服务器上创建一个表,这个表的数据实际存储在另一个远程MySQL服务器上。MySQL Dblink插件:一个让跨数据库访问变得更加简单有效的工具,用于在MySQL数据库之间建立连接,允许用户通过SQL查询跨数据库访问表格。使用标准的JDBC/ODBC连接:通过应用程序层实现跨数据库连接和操作。

喝醉酒的小白 1841

兼容 oracle_为什么说OceanBase在关键领域不可能替代Oracle

2019年10月9日,某部委人士在公开会议上指出,“OceanBase测试指标虽高,但在关键领域仍不能使用”、“互联网和银行场景完全不同”、“不能支持跑批(批处理业务)”。问题本质是“什么样的分布式数据库在关键领域可用”?从用户的角度,答案很明确,兼容Oracle功能且满足性能要求。兼容Oracle,意味着“不改造应用系统无缝升级模式”,用户责任小,风险低。满足性能要求,意味着业务可运行。那Oce...

weixin_39658019的博客 1019

生产级SQL避坑指南:杜绝WHERE子句函数顺序依赖与会话污染

数据库开发必须牢记的5条铁律严禁在 WHERE 中使用有副作用的函数(修改变量、写表、发消息等一律禁止)副作用操作必须放在存储过程/匿名块中,显式执行纯函数必须声明 STABLE/IMMUTABLE永远不要假设 WHERE 子句的执行顺序优先用参数替代全局变量,杜绝连接池污染在WHERE子句中依赖函数执行顺序,是一种看似工作、迟早爆炸的反模式。KES 当前版本虽然保证了从左到右的执行顺序,但这不应成为你编写依赖此行为代码的理由。会话污染:连接池环境下的全局变量残留会导致静默数据错误未来风险。

2301_80350265学无止尽5的博客 1万+

MyBatis jdbcType详解:从线上事故到类型安全的最佳实践

在Java数据库编程中,JDBC类型映射是连接Java对象与SQL数据库的桥梁,其核心原理在于为PreparedStatement的参数提供精确的SQL类型信息。理解这一机制的技术价值在于确保类型安全、防止空值异常,并实现跨数据库的兼容性。尤其在处理null值时,若未显式指定类型,数据库驱动可能因无法推断SQL类型而抛出“Invalid column type”等错误。这一原理在MyBatis框架中通过jdbcType属性得以具体应用,它充当了Java类型与数据库类型间的“翻译官”。在实际开发场景中,无论是

weixin_34379433的博客 543

数据库——MySQL

MySQL数据库基础教程全面介绍了关系型数据库的核心概念和操作。

qq_46518480的博客 418
上一篇: 续2:我们需不需要像存储过程一样的跨数据库过程
下一篇: 整理:我们需不需要像存储过程一样的跨数据库过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值