统一服务在支持ANSI SQL标准语法的DML(data manipulation language)基础上,针对API开发过程中SQL语法使用的具体需求,定义了自己的扩展,以支持参数声明、动态SQL、范围参数生成等用法。本文为您介绍SQL语法指南。
使用限制
仅支持SELECT操作。
不支持事务功能。
表名和列名默认情况下不区分大小写。
基本语法
[ WITH with_subquery [, ...] ]
SELECT
[ [ ALL | DISTINCT ] | select_expr [ AS output_name ] [, ...] ]
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression
[ ASC | DESC ]
[ LIMIT { number | ALL } ]
SQL模式API支持基本语法及操作范围如上所示,不同数据源上可以使用语法不尽相同,具体以目标数据源的SQL语法说明为准。
参数声明
基础SQL语法之上,统一服务支持以 ${<参数名>,<类型>,<默认值>} 三元符的方式进行各类调用时参数的声明。
示例:使用SQL语句定义一个声明了数值型参数“uid”和字符串数组参数“unArr”的API,且参数“uid”设置默认值为“1”。
SELECT name, addr, tel
FROM table_name
WHERE user_id = ${uid,Number,1}
and user_name in ${unArr,Array,a,b};
已支持的参数类型
类型 | 说明 | 对应数据库类型 | 默认值设置(非必须) | 示例 |
Number | 数值 | int、Integer、Double、BigInt等 | 单值 | ${uid,Number,1} |
String | 字符串 | Char、Varchar、Text、String等 | 单值,不需要引号 | ${tel,String,177723_test} |
Array | 字符串数组 | Char、Varchar、Text、String等 | 多值用逗号分隔 | ${names,Array,a,b} |
Array_Num | 数值数组 | int、Integer、Double、BigInt等 | 多值用逗号分隔 | ${uids,Array_Num,1,2,3} |
date | 日期类型,需要调用方自行保证日期格式 | Date、DateTime,TimeStamp等 | 单值,不需要引号 | ${date,Date,2022-12-30 12:00:00} |
动态SQL
统一服务通过内置自定义函数NotRequired(),实现了对于动态SQL特性的支持,以实现非必选参数的设置,使用方式为NotRequired(<字段> <操作符> ${<参数名>,<类型>,<默认值}>)。
示例:定义一个声明了数值型参数“uid”和字符串数组可选参数“unArr”的API,且参数“uid”设置默认值为“1”,当请求参数中未传入“unArr”参数时,则SQL语句中条件“user_name in ${unArr,Array,}”不生效。
SELECT name, addr, tel
FROM table_name
WHERE user_id = ${uid,Number,1}
and NotRequired(user_name in ${unArr,Array,});