kaiyun.com 怎样写出不错在各个数据库中齐能推行的SQL?
发布日期:2023-12-09 13:36 点击次数:84kaiyun.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”);