自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

怎樣寫出可以在各個(gè)數(shù)據(jù)庫中都能執(zhí)行的SQL?

數(shù)據(jù)庫 SQL Server
不同類型數(shù)據(jù)庫的函數(shù)語法或多或少存在差異,要想讓功能相同的 SQL 查詢語句在不同類型的數(shù)據(jù)庫中都能被順利執(zhí)行,就要把各數(shù)據(jù)庫都有的那些差異化函數(shù)語法進(jìn)行翻譯。

 不同類型數(shù)據(jù)庫的函數(shù)語法或多或少存在差異,要想讓功能相同的 SQL 查詢語句在不同類型的數(shù)據(jù)庫中都能被順利執(zhí)行,就要把各數(shù)據(jù)庫都有的那些差異化函數(shù)語法進(jìn)行翻譯。

[[442121]]

使用 ORM 技術(shù)能夠?qū)⒊绦騿T書寫的查詢轉(zhuǎn)換成不同數(shù)據(jù)庫的 SQL,相當(dāng)于有一定的移植能力。但 ORM 技術(shù)只適合應(yīng)對(duì) OLTP 場景下的簡單 SQL,難以實(shí)現(xiàn) OLAP 場景下較復(fù)雜 SQL 的移植,例如,使用了 ORM 技術(shù)中不直接支持的函數(shù),或者遇到 FROM 中包含子查詢的復(fù)雜 SQL。

集算器 SPL 設(shè)計(jì)了一套標(biāo)準(zhǔn)的 SQL 查詢語法,該語法內(nèi)置大量函數(shù)(還在持續(xù)追加中),可描述更多常運(yùn)算。SPL 中有一個(gè) sqltranslate 函數(shù),可以把這種標(biāo)準(zhǔn) SQL 翻譯成不同數(shù)據(jù)庫的 SQL,實(shí)現(xiàn)數(shù)據(jù)庫的遷移。

比如這樣的標(biāo)準(zhǔn) SQL:

 

  1. SELECT CLIENT, YEAR(ORDERDATE), SUM(AMOUNT) 
  2.             , COUNT(ORDERID) 
  3. FROM ORDERS 
  4. GROUP BY CLIENT, YEAR(ORDERDATE) 
  5. HAVING SUM(AMOUNT) > 2000 

 

用.sqltranlate(“MYSQL”) 翻譯后就得到:

 

  1. SELECT CLIENT, YEAR(ORDERDATE), SUM(AMOUNT) 
  2.             , COUNT(ORDERID) 
  3. FROM ORDERS 
  4. GROUP BY CLIENT, YEAR(ORDERDATE) 
  5. HAVING SUM(AMOUNT) > 2000 

 

而如果使用.sqltranslate(“ORACLE”) 將返回:

 

  1. SELECT CLIENT, EXTRACT(YEAR FROM ORDERDATE), SUM(AMOUNT) 
  2.             , COUNT(ORDERID) 
  3. FROM ORDERS 
  4. GROUP BY CLIENT, EXTRACT(YEAR FROM ORDERDATE) 
  5. HAVING SUM(AMOUNT) > 2000 

 

可以看到,標(biāo)準(zhǔn)函數(shù)能夠正確地根據(jù)數(shù)據(jù)庫選擇相應(yīng)的函數(shù)。

SPL 實(shí)現(xiàn) SQL 移植,采取的策略是只對(duì)標(biāo)準(zhǔn) SQL 中的函數(shù)進(jìn)行翻譯,不翻譯(原樣照抄)語句,從而使標(biāo)準(zhǔn) SQL 可描述更多的運(yùn)算。比如,對(duì)于下面的子查詢無論翻譯成哪種數(shù)據(jù)庫 SQL 都不會(huì)變,也都可以正常執(zhí)行。

 

  1. SELECT 
  2.     ORDERID, 
  3.     M 
  4. FROM 
  5.     ( 
  6.     SELECT 
  7.         ORDERID, 
  8.         MONTH(ORDERDATE) M 
  9.     FROM 
  10.         ORDERS) T1 

 

集算器 SPL 是 Java 寫的開源軟件,很容易被 JAVA 應(yīng)用 集成而使用這個(gè) SQL 移植的功能,在應(yīng)用程序中如果需要翻譯 SQL 語句,可以直接調(diào)用 api 方法:

 

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

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2021-12-22 23:58:16

SQL數(shù)據(jù)庫語法

2021-04-01 16:43:05

代碼可讀性開發(fā)

2011-06-03 10:31:14

SQL

2021-01-08 07:38:15

代碼功能調(diào)用

2011-06-13 14:05:58

描述標(biāo)簽

2011-04-01 14:34:31

SQL Server數(shù)嵌套子查詢

2010-06-30 13:19:17

SQL Server

2020-08-26 14:45:34

SQL數(shù)據(jù)庫數(shù)次

2022-07-08 10:09:47

SPLSQL數(shù)據(jù)庫

2023-10-29 17:15:57

2011-03-17 17:27:48

Sybase數(shù)據(jù)庫引擎

2010-04-19 10:00:02

Oracle SQL

2011-08-03 14:50:26

SQL Server數(shù)Visual Stud.MDF數(shù)據(jù)庫文件

2010-09-07 15:20:58

SQL語句事務(wù)

2009-04-30 09:28:05

SynonymOpenquerySQL Server

2011-07-29 09:20:23

Oracle數(shù)據(jù)庫定時(shí)器Job

2011-04-01 14:51:37

Oracle數(shù)據(jù)庫導(dǎo)入導(dǎo)出

2020-10-09 15:39:57

數(shù)據(jù)庫工具技術(shù)

2011-03-28 12:33:09

SQL Server數(shù)據(jù)庫鏈接

2011-04-01 14:51:37

Oracle數(shù)據(jù)庫導(dǎo)入導(dǎo)出
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)