kaiyun.com 怎样写出不错在各个数据库中齐能推行的SQL?

栏目分类kaiyun.com 怎样写出不错在各个数据库中齐能推行的SQL?

你的位置:kaiyuan体育 > 新闻中心 >

kaiyun.com 怎样写出不错在各个数据库中齐能推行的SQL?

发布日期:2023-12-09 13:36    点击次数:84

kaiyun.com 怎样写出不错在各个数据库中齐能推行的SQL?

 kaiyun.com不同类型数据库的函数语法或多或少存在互异kaiyun.com,要念念让功能有计划的 SQL 查询语句在不同类型的数据库中齐能被胜利推行,就要把各数据库齐有的那些互异化函数语法进行翻译。

[[442121]]

使用 ORM 手艺不详将要领员书写的查询调遣成不同数据库的 SQL,终点于有一定的移植智商。但 ORM 手艺只妥当应答 OLTP 场景下的肤浅 SQL,难以终了 OLAP 场景下较复杂 SQL 的移植,举例,使用了 ORM 手艺中不顺利援助的函数,或者碰到 FROM 中包含子查询的复杂 SQL。

集算器 SPL 筹谋了一套措施的 SQL 查询语法,该语法内置多数函数(还在捏续追加中),可描摹更多常运算。SPL 中有一个 sqltranslate 函数,不错把这种措施 SQL 翻译成不同数据库的 SQL,终了数据库的移动。

比如这么的措施 SQL:

 

SELECT CLIENT, YEAR(ORDERDATE), SUM(AMOUNT)             , COUNT(ORDERID) FROM ORDERS GROUP BY CLIENT, YEAR(ORDERDATE) HAVING SUM(AMOUNT) > 2000 

 

用.sqltranlate(“MYSQL”) 翻译后就获取:

 

SELECT CLIENT, YEAR(ORDERDATE), SUM(AMOUNT)             , COUNT(ORDERID) FROM ORDERS GROUP BY CLIENT, YEAR(ORDERDATE) HAVING SUM(AMOUNT) > 2000 

 

而淌若使用.sqltranslate(“ORACLE”) 将复返:

 

SELECT CLIENT, EXTRACT(YEAR FROM ORDERDATE), SUM(AMOUNT)             , COUNT(ORDERID) FROM ORDERS GROUP BY CLIENT, EXTRACT(YEAR FROM ORDERDATE) HAVING SUM(AMOUNT) > 2000 

 

不错看到,措施函数不详正确地字据数据库取舍相应的函数。

SPL 终了 SQL 移植,遴荐的政策是只对措施 SQL 中的函数进行翻译,不翻译(原样照抄)语句,从而使措施 SQL 可描摹更多的运算。比如,关于底下的子查询不管翻译成哪种数据库 SQL 齐不会变,也齐不错平方推行。

 

SELECT     ORDERID,     M FROM     (     SELECT         ORDERID,         MONTH(ORDERDATE) M     FROM         ORDERS) T1 

 

集算器 SPL 是 Java 写的开源软件,很容易被 JAVA 期骗 集成而使用这个 SQL 移植的功能,在期骗要领中淌若需要翻译 SQL 语句,不错顺利调用 api 阵势:

 

String sql = “SELECT CLIENT, YEAR(ORDERDATE), SUM(AMOUNT) , COUNT(ORDERID) FROM ORDERS GROUP BY CLIENT, YEAR(ORDERDATE) HAVING SUM(AMOUNT) > 2000”;  sql = com.raqsoft.dm.sql.SQLUtil.translate(sql, “ORACLE”);