9.22 将标准 SQL 语句翻译成指定数据库所使用的格式

 

将标准 SQL 语句翻译成指定数据库所使用的格式。
某公司的销售数据,部分存储在数据库 oracle 中,部分存储在数据库 mysql 中。求 2015 年 3 月 18 日到 7 月 18 日期间,销售额大于 1000 的订单数量。订单表结构相同,如下:

ORDERID CUSTOMERID EMPLOYEEID ORDERDATE AMOUNT
10400 EASTC 1 2014/01/01 3063.0
10401 HANAR 1 2014/01/01 3868.6
10402 ERNSH 8 2014/01/02 2713.5
10403 ERNSH 4 2014/01/03 1005.9
10404 MAGAA 2 2014/01/03 1675.0

函数 sql.sqltranslate(dbtype) 将标准 SQL 中 的函数翻译成指定数据库的格式。

脚本:

A
1 select ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS where ORDERDATE between date(‘2015-03-18’) and date(‘2015-07-18’) and AMOUNT>1000
2 =A1.sqltranslate(“ORACLE”)
3 =A1.sqltranslate(“MYSQL”)
4 =connect(“oracle”).query@x(A2)
5 =connect(“mysql”).query@x(A3)
6 =[A4,A5].merge@ou(ORDERID)
7 =A6.len()

A1 标准 SQL
A2 将标准 SQL 翻译成 ORACLE 格式
A3 将标准 SQL 翻译成 MYSQL 格式
A4 连接 oracle 并执行 SQL
A5 连接 mysql 并执行 SQL
A6 有序归并,去除 ID 相同的订单
A7 统计数量

运行结果:

Value
63

标准 SQL(A1):

select ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS where ORDERDATE  between date('2015-03-18') and date('2015-07-18') and AMOUNT>1000

ORACLE(A2):

select ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS where ORDERDATE  between TO_DATE('2015-03-18','YYYY-MM-DD') and TO_DATE('2015-07-18','YYYY-MM-DD') and AMOUNT>1000

MYSQL(A3):

select ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS where ORDERDATE  between DATE_FORMAT('2015-03-18','%Y-%m-%d') and DATE_FORMAT('2015-07-18','%Y-%m-%d') and AMOUNT>1000