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