概述什么是KSQLKSQL对金蝶产品实现多数据库支持非常重要的基础引擎。所有与金蝶ERP产品支持的数据库通讯的应用程序都通过向数据库服务器发送KSQL语句来实现通讯,与应用程序的用户界面无关。
KSQL是SQL92的子集。它抽取了SQL92的部分语法来满足金蝶ERP产品的最大功能集合,并随着金蝶BOS产品的发展逐渐丰富和完善。
1. 一种金蝶自己定义的SQL方言
2. 需要翻译到具体数据库厂商的SQL方言
3. KSQL具备的特性,能够翻译到我们支持的所有数据库中
4. 类似于MS SQL SERVER的T-SQLKSQL的必要性1. 金蝶BOS平台的多数据库支持策略
2. 大多数开发人员只熟悉一种数据库
3. 大多数不同数据库的方言特性具有共通性,可以抽取为公共的语言特性
4. SQL翻译效率很高
5. KSQL提供临时表管理等功能
KSQL规范KSQL语法规则规范
用于
大写
KSQL 关键字或文法终结符(在具体语法子句中予以解释)
小写
KSQL的语法子句和文法非终结符(在具体语法子句中予以解释)
斜体
KSQL 语法中用户提供的参数。
| (竖线)
分隔括号或大括号内的语法项目。只能选择一个项目。
[ ] (方括号)
可选语法项目。不必键入方括号。
{}(大括号)
必选语法项。不要键入大括号。
[,...n]
表示前面的项可重复n次。每一项由逗号分隔。
[ ...n]
表示前面的项可重复n次。每一项由空格分隔。
加粗
数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样键入的文本。
<标签> ::=
语法块的名称。此规则用于对可在语句中的多个位置使用的过长语法或语法单元部分进行分组和标记。适合使用语法块的每个位置由括在尖括号内的标签表示:<标签>。
除非特别申明,否则所有对数据库对象名的KSQL引用可以是格式如下:
[database_name.]object_name
object_name引用对象的名称。
当引用某个特定对象时,不必总是为KSQL指定标识该对象的数据库实体名称,也可以直接使用object_name引用某个特定对象,但它要依赖它自己所在的上下文环境。KSQL数据类型数据类型预览数据类型
长度
Sql server
Oracle
Db2
CHAR
[1,254]
CHAR[(n)]
CHAR[(n)]
CHAR[(n)]
VARCHAR
[1,4000]
VARCHAR[(n)]
VARCHAR2(n)
VARCHAR(n)
NCHAR
[1,2000]
NCHAR[(n)]
NCHAR[(n)]
?
NVARCHAR
[1,4000]
NVARCHAR[(n)]
NVARCHAR2(n)
BINARY
[1,2000]
BINARY[(n)]
RAW( n )
VARCHAR(n) FOR BIT DATA
VARBINARY
[1,8000]
VARBINARY[(n)]
LONG RAW
LONG VARCHAR FOR BIT DATA
BLOB
[1,2G]
IMAGE
BLOB
BLOB(n)
CLOB
[1,2G]
TEXT
CLOB
CLOB(n)
NCLOB
[1,1G]
NTEXT
NCLOB
?
INT,INTEGER
[-2^31,2~31-1]
INT
NUMBER(38)
INT
DECIMAL
[-10^31+1,10^31-1]
DATETIME
DATETIME
DATE
DATE TIME TIMESTAMP
数据类型分类
KSQL支持的数据类型为CHAR , VARCHAR , NCHAR,NVARCHAR,BINARY,VARBINARY, BLOB ,CLOB , NCLOB, INT, INTEGER,DECIMAL ,DATE,TIME DATETIME
数据类型层次结构
字符和二进制字符串大对象
CHAR
VARCHAR
CLOB
UNICODE字符和字符串大对象
NCHAR
NVARCHAR
NCLOB
二制数据类型
BINARY
VARBINARY
二进制大对象
BLOB
精确数字
INT
INTEGER
近似数字 DECIMAL
时间数据类型
日期 DATE
时间 TIME
时间戳DATETIME
数据类型的优先顺序
当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是目标数据库所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。
下面是KSQL数据类型的优先顺序:
CHAR
VARCHAR
NCHAR
NVARCHAR
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT INTEGER
DATETIME (最高)运算符号+(加)
+(正)
-(减)
-(负)
*(乘)
/(除)
=(等于)
>(大于)
<(小于)
>=(大于或等于)
<=(小于或等于)
<>(不等于)
!=(不等于)注释――(单行注释)
//(单行注释)
/* */(多行注释)通配符[ ](通配符 — 需匹配的字符)
[^](通配符字符 — 无需匹配的字符)
_(通配符 — 匹配一个字符)
%(通配符 — 匹配一个或多个字符)标识符号
KSQL规定,数据库名,数据库别名,数据表名,数据表别名,字段名,字段别名,视图名,视图别名,索引名,索引别名, 约束名都属于标识符范围。常量
一、时间常量
语法
格式
含义
{d 'yyyy-mm-dd'}
日期
{t 'hh:mm:ss'}
时间
{ts 'yyyy-mm-dd hh:mm:ss'}
时间戳
注释
时间戳的日期和时间之间只允许出现一个空格分隔符号。
时间中不支持毫秒。
示例
时间戳:{ts‘2002-07-17 10:51:18’}
日期:{d‘2002-07-17’}
时间:{t‘10:51:18’}
二、字符串常量
语法
[ N | n ] ‘ [ ^’ ] ’
参数
N
指示该字符歘常量为UNICODE字符串。
n
指示该字符歘常量为UNICODE字符串。
注释
包含在’’中的除’以外的任何字符序列。
示例
合法的字符串常量:‘’, ‘ ‘, ‘ ‘, ‘ ^ ‘, ’hello’等。
合法的UNICODE字符串常量:n‘’, N‘ ‘, N‘ ‘, n‘ ^ ‘, N’hello’等。
不合法的字符串常量:’’’,’’’’’等。
不合法的字符串常量:N’’’,n’’’’’等。