KingbaseES数据库:兼容 SQL 语法及 Oracle 过程化语言的语法基础
KingbaseES数据库:兼容 SQL 语法及 Oracle 过程化语言的语法基础
,KingbaseES 数据库(Oracle 模式)以内核兼容为基础,实现了涵盖内核、工具和接口的全方位 Oracle 兼容,当前 Oracle 常用能力兼容性达 100%,能助力客户应用无感平滑迁移。在基础能力上,它兼容 SQL 语法、Oracle 过程化语言语法基础,覆盖数据类型、伪列、常用表达式、系统视图、内置函数等多方面;高级能力方面,支持 ROWID、BFILE 等特殊类型,DBLink 访问、物化视图等功能,还兼容客户端编程接口及 Oracle XML/JSON 能力,具备对等 GIS 处理能力。具体来看,数据类型兼容全部 Oracle 支持类型,内置函数兼容大部分且部分有细微差异,系统视图兼容部分静态数据字典视图与动态性能视图,SQL 和 PL/SQL 语法也支持绝大部分 Oracle 相关语法。

一、Oracle兼容性总览
本节主要介绍 KingbaseES 数据库(Oracle 模式)与原生 Oracle 数据库的兼容性对比信息。
KingbaseES以内核兼容为基础,打造出涵盖内核、工具和接口的全方位 Oracle 兼容能力。当前Oracle常用能力兼容性已达100%。KingbaseES除兼容基本能力外,还兼容PL/SQL内置包、DBLink等高级能力,从而在客户应用移植时,实现应用无感、平滑迁移。
在基础能力方面,KingbaseES兼容SQL 语法及Oracle过程化语言的语法基础,完成了对数据类型、伪列、常用表达式和条件、系统视图、内置函数、模式对象定义、DML、DQL语句,以及控制语句、存储过程/函数、匿名块、触发器、静态SQL、动态SQL等各方面的兼容。
在高级能力方面,KingbaseES支持ROWID,BFILE等特殊类型,支持DBLink同异构数据库访问,物化视图,分区操作,支持完备的内置包功能,提供对客户端通用编程接口(ODBC,JDBC等)和自有接口(OCI,OCCI,Pro*C等)的全面支持,以及兼容Oracle XML/JSON能力,实现对半结构化文档型数据的处理等。此外,KingbaseES还提供了与Oracle对等的空间数据GIS处理能力。

主要从以下几个方面介绍 KingbaseES 数据库与 Oracle 数据库的兼容性对比信息:
- 数据类型
- 内置函数
- 系统视图
- SQL操作
- PL/SQL操作
二、数据类型
本节主要介绍 Kingbase 数据库的 Oracle 模式对原生 Oracle 数据库中数据类型的兼容情况。
Oracle数据类型兼容情况说明
序号 | Oracle数据类型 | KingbaseES兼容情况 |
---|---|---|
1 | CHAR | 兼容 |
2 | VARCHAR | 兼容 |
3 | VARCHAR2 | 兼容 |
4 | NCHAR | 兼容 |
5 | NVARCHAR2 | 兼容 |
6 | NUMBER | 兼容 |
7 | FLOAT | 兼容 |
8 | BINARY_FLOAT | 兼容 |
9 | BINARY_DOUBLE | 兼容 |
10 | INT | 兼容 |
11 | SMALLINT | 兼容 |
12 | DATE | 兼容 |
13 | TIMESTAMP | 兼容 |
14 | TIMESTAMP WITH TIME ZONE | 兼容 |
15 | TIMESTAMP WITH LOCAL TIME ZONE | 兼容 |
16 | INTERVAL DAY TO SECOND | 兼容 |
17 | INTERVAL YEAR TO MONTH | 兼容 |
18 | BLOB | 兼容 |
19 | CLOB | 兼容 |
20 | NCLOB | 兼容 |
21 | BFILE | 兼容 |
22 | RAW | 兼容 |
23 | LONG RAW | 兼容 |
24 | JSON | 兼容 |
25 | XML | 兼容 |
26 | ROWID | 兼容 |
27 | UROWID | 兼容 |
28 | LONG | 兼容 |
三、内置函数
本节主要介绍 KingbaseES 数据库的 Oracle 模式与原生 Oracle 数据库中内置函数的详细兼容对比信息。
(一)数字函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | ABS | 兼容 | 返回一个给定数字的绝对值 |
2 | ACOS | 兼容 | 返回一个给定数字的反余弦值 |
3 | ASIN | 兼容 | 返回一个给定数字的反正弦值 |
4 | ATAN | 兼容 | 返回一个给定数字的反正切值 |
5 | ATAN2 | 兼容 | 返回两个给定数字的反正切值 |
6 | BITAND | 兼容 | 返回两个给定数字按位进行AND运算后的结果 |
7 | CEIL | 兼容 | 返回大于等于指定值的最小整数 |
8 | COS | 兼容 | 返回一个给定数字的余弦值 |
9 | COSH | 兼容 | 返回一个给定数字的反余弦值 |
10 | EXP | 兼容 | 返回e的n(给定数字)次幂 |
11 | FLOOR | 兼容 | 返回小于或等于指定值的最大整数 |
12 | LN | 兼容 | 返回一个给定数字的自然对数 |
13 | LOG | 兼容 | 返回以第一个参数为底的第二个参数的对数 |
14 | MOD | 兼容 | 返回第一个参数除以第二个参数的余数 |
15 | NANVL | 兼容 | 若第一个参数是'NaN',返回第二个参数,否则返回第一个参数;若任意一个参数为NULL,则返回NULL |
16 | POWER | 兼容 | 计算数值幂次方,第一个参数是底数,第二个参数是指数 |
17 | REMAINDER | 兼容 | 计算第一个参数除以第二个参数的余数 |
18 | ROUND(NUMBER) | 兼容 | 返回四舍五入后的数值 |
19 | SIGN | 兼容 | 根据参数是0、正数或负数,分别返回0、1或-1 |
20 | SIN | 兼容 | 返回给定弧度值的正弦 |
21 | SINH | 兼容 | 返回指定数值的双曲正弦 |
22 | SQRT | 兼容 | 返回给定输入数字的平方根 |
23 | TAN | 兼容 | 返回指定弧度值的正切 |
24 | TANH | 兼容 | 返回指定数值的双曲正切 |
25 | TRUNC(NUMBER) | 兼容 | 截断数值 |
26 | WIDTH_BUCKET | 兼容 | 返回指定值位于桶中的位置 |
(二)返回字符串的字符函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | CHR | 兼容,但有差异 | 返回指定ASCII码的字符。KingbaseES不允许输入0,Oracle允许输入0 |
2 | CONCAT | 兼容 | 字符串拼接 |
3 | INITCAP | 兼容 | 将第一个字母变为大写,其它字母变为小写 |
4 | LOWER | 兼容 | 将所有字母全部变为小写 |
5 | LPAD | 兼容 | 从左边对字符串使用指定的字符进行填充 |
6 | LTRIM | 兼容 | 从字符串左侧删除字符 |
7 | NLS_INITCAP | 兼容 | 将第一个字母变为大写,其它字母变为小写,允许指定转换时使用的排序规则 |
8 | NLS_LOWER | 兼容 | 返回给定字符串的小写形式,允许指定转换时使用的排序规则 |
9 | NLS_UPPER | 兼容 | 返回给定字符串的大写形式,允许指定转换时使用的排序规则 |
10 | NLSSORT | 兼容 | 依据指定的排序规则,生成字符值 CHAR 的排序关键字 |
11 | REGEXP_REPLACE | 兼容,但有差异 | 用于字符串匹配替换。Oracle与KingbaseES的正则中match_param的意义有部分不同导致结果不同,可参考正则表达式元语法 |
12 | REGEXP_SUBSTR | 兼容 | 通过正则表达式搜索并返回与正则表达式匹配的字符串 |
13 | REPLACE | 兼容 | 将字符串的指定字符替换为另一个字符(多用于表中字段) |
14 | RPAD | 兼容 | 从右边对字符串使用指定的字符进行填充 |
15 | RTRIM | 兼容 | 从字符串右侧删除字符 |
16 | SUBSTR | 兼容 | 从指定位置截取指定字符数的字符串 |
17 | TRANSLATE | 兼容 | 替换字符串多个单个字符 |
18 | TRIM | 兼容 | 删除字符串的前导或尾随字符,或者同时删除前导和尾随字符 |
19 | UPPER | 兼容 | 将所有字母全部变为大写 |
其中KingbaseES的NLS_UPPER、NLS_LOWER和NLS_INITCAP函数,和UPPER、LOWER、INITCAP函数相比,可以指定使用的Collation。下表列出了Oracle的Collation名称和KingbaseES的Collation名称的映射关系:
Oracle Collation | KingbaseES Collation |
---|---|
ASCII7 | c |
BIG5 | zh_TW |
BINARY | c |
GBK | zh_CN.gbk |
GENERIC_M | ucs_basic |
SCHINESE_STROKE_M | zh_CN |
SCHINESE_PINYIN_M | zh_CN |
TCHINESE_RADICAL_M | zh_TW |
TCHINESE_STROKE_M | zh_TW |
UCA1210_SCHINESE | zh_CN.utf8 |
UCA1210_SCHINESE1 | zh_CN.utf8 |
UCA1210_SCHINESE2 | zh_CN.utf8 |
UCA1210_TCHINESE | zh_TW.utf8 |
UCA1210_TCHINESE1 | zh_TW.utf8 |
UCA0700_SCHINESE | zh_CN.utf8 |
UCA0700_SCHINESE1 | zh_CN.utf8 |
UCA0700_SCHINESE2 | zh_CN.utf8 |
UCA0700_TCHINESE | zh_TW.utf8 |
UCA0700_TCHINESE1 | zh_TW.utf8 |
UCA0620_SCHINESE | zh_CN.utf8 |
UCA0620_SCHINESE1 | zh_CN.utf8 |
UCA0620_SCHINESE2 | zh_CN.utf8 |
UCA0620_TCHINESE | zh_TW.utf8 |
UCA0620_TCHINESE1 | zh_TW.utf8 |
(三)返回数值的字符函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | ASCII | 兼容 | 返回指定字符的ASCII码 |
2 | INSTR | 兼容 | 基于字符查找字符串第一个字符在另一个字符串中出现的位置 |
3 | LENGTH | 兼容 | 返回字符串的字符数 |
4 | REGEXP_COUNT | 兼容,但有差异 | 返回匹配字符串数量。Oracle与KingbaseES的某些数据类型不同导致结果不同,例如time类型。Oracle与KingbaseES的正则中match_param的意义有部分不同导致结果不同,可参考正则表达式元语法 |
5 | REGEXP_INSTR | 兼容,但有差异 | 返回字符串的起始位置,或者结束位置。Oracle与KingbaseES的某些数据类型不同导致结果不同,例如time类型。Oracle与KingbaseES的正则中match_param的意义有部分不同导致结果不同,可参考正则表达式元语法 |
(四)时间日期函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | ADD_MONTHS | 兼容 | 用于在给定的日期上增加或减少指定数量的月份 |
2 | CURRENT_DATE | 兼容 | 当前会话时区中的日期 |
3 | CURRENT_TIMESTAMP | 兼容,但有差异 | 当前会话时区中的日期和时间,差异是精度不同 |
4 | EXTRACT(datetime) | 兼容 | 从日期时间中提取时间字段(YEAR、MONTH、DAY、HOUR、MINUTE、SECOND) |
5 | LAST_DAY | 兼容 | 返回给定日期所在月份的最后一天 |
6 | LOCALTIMESTAMP | 兼容 | 以TIMESTAMP数据类型返回当前会话时区中的日期和时间 |
7 | MONTHS_BETWEEN | 兼容 | 返回两个给定日期之间的月数 |
8 | NEW_TIME | 兼容 | 将日期从指定时区转换为另一个指定时区 |
9 | NEXT_DAY | 兼容 | 返回晚于给定日期的指定周一到周日的日期 |
10 | NUMTODSINTERVAL | 兼容 | 时间间隔(DAY、HOUR、MINUTE、SECOND) |
11 | NUMTOYMINTERVAL | 兼容 | 日期间隔(YEAR、MONTH) |
12 | TZ_OFFSET | 兼容 | 返回指定时区的时区偏移量 |
13 | ROUND(DATE) | 兼容 | 将给定的日期四舍五入到指定的单位 |
14 | SESSIONTIMEZONE | 兼容 | 返回当前会话时区的值 |
15 | SYSDATE | 兼容 | 返回系统当前日期和时间 |
16 | SYSTIMESTAMP | 兼容 | 返回系统当前日期和时间 |
17 | TO_CHAR(DATATIME) | 兼容 | 返回一个VARCHAR2类型的字符串 |
18 | TO_DSINTERVAL | 兼容 | 将给定字符串转为INTERVAL DAY TO SECOND类型的值 |
19 | TO_TIMESTAMP | 兼容 | 将给定字符串转为TIMESTAMP类型的值 |
20 | TO_TIMESTAMP_TZ | 兼容 | 将给定字符串转为TIMESTAMP WITH TIME ZONE类型的值 |
21 | TO_YMINTERVAL | 兼容 | 将给定字符串转为INTERVAL MONTH TO YEAR类型的值 |
22 | TRUNC (DATE) | 兼容 | 将给定的日期截断到指定的单位 |
(五)一般比较函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | GREATEST | 兼容 | 返回给定参数列表中的最大值 |
2 | LEAST | 兼容 | 返回给定参数列表中的最小值 |
(六)转换函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 | |
---|---|---|---|---|
1 | ASCIISTR | 兼容 | 返回给定字符串的ASCII版本 | |
2 | BIN_TO_NUM | 兼容 | 将二进制数转换为十进制 | |
3 | CAST | 兼容 | 将参数从一种类型转换为另一种类型 | |
4 | CHARTOROWID | 兼容 | 将 CHAR、VARCHAR2、NCHAR 或 NVARCHAR2 数据类型 的值转换为 ROWID数据类型 | |
5 | CONVERT | 兼容,但有差异 | Oracle与KingbaseES均用于字符串的字符集转换,但是第二个参数和第三个参数的顺序不同 | |
6 | HEXTORAW | 兼容 | 将给定的16进制的值转换为RAW类型的值 | |
7 | NUMTODSINTERVAL | 兼容 | 将给定的数字转换为 INTERVAL DAY TO SECOND 常量 | |
8 | NUMTOYMINTERVAL | 兼容 | 将给定的数字转换为 INTERVAL YEAR TO MONTH 常量 | |
9 | RAWTOHEX | 兼容 | 将RAW类型的值转换为16进制的值 | |
10 | RAWTONHEX | 兼容 | 将RAW类型的值转换为包含十六进制表示的字符值 | |
11 | TREAT | 兼容 | 用于将一个类型的表达式显式转换为其子类型的表达式 | |
12 | ROWIDTOCHAR | 兼容 | 将ROWID值转换为字符数据类型 | |
13 | TO_BINARY_DOUBLE | 兼容 | 将输入的数据(可以是字符型、数值型等)转换为 BINARY_DOUBLE 数据类型 | |
14 | TO_BLOB(BFILE) | 兼容 | 将BFILE值转换为BLOB值 | |
15 | TO_BLOB(RAW) | 兼容 | 将RAW值转换为BLOB值 | |
16 | TO_CHAR(BFILE | BLOB) | 兼容 | 将BFILE或BLOB数据转换为数据库字符集,以VARCHAR2值返回 |
17 | TO_CHAR(CHARACTER) | 兼容 | 将 NCHAR、NVARCHAR2、CLOB 或 NCLOB 数据转换为数据库字符集,以VARCHAR2值返回 | |
18 | TO_CHAR(DATETIME) | 兼容 | 将给定的日期时间或间隔值根据指定的格式转化为字符串 | |
19 | TO_CHAR(NUMBER) | 兼容 | 将给定的数值转换为VARCHAR2类型 | |
20 | TO_CLOB(BFILE | BLOB) | 兼容 | 将BFILE或BLOB数据转换为数据库字符集,以CLOB值返回 |
21 | TO_CLOB(CHARACTER) | 兼容 | 将LOB列中的NCLOB值或其他字符串转换为CLOB值 | |
22 | TO_DATE | 兼容 | 将给定的字符串转换为DATE数据类型的值 | |
23 | TO_DSINTERVAL | 兼容 | 将给定的字符串转换为 INTERVAL DAY TO SECOND 类型的值 | |
24 | TO_MULTI_BYTE | 兼容 | 将给定参数的所有单字节字符转换为相应的多字节字符 | |
25 | TO_NCHAR(CHARACTER) | 兼容 | 将CHAR、VARCHAR2、CLOB或NCLOB值转换为国际字符集 | |
26 | TO_NCHAR(DATETIME) | 兼容 | 将给定的日期时间或间隔值根据指定的格式转化为字符串 | |
27 | TO_NCHAR(NUMBER) | 兼容 | 将给定的数字转换为国际字符集中的字符串 | |
28 | TO_NCLOB | 兼容 | 将LOB列中的CLOB值或其他字符串转换为NCLOB值 | |
29 | TO_NUMBER | 兼容 | 将给定的参数转换为NUMBER类型的值,若存在字母,则只保留数字 | |
30 | TO_SINGLE_BYTE | 兼容 | 将给定参数的所有多字节字符转换为相应的单字节字符 | |
31 | TO_TIMESTAMP | 兼容 | 将给定的字符串转换为TIMESTAMP类型的值 | |
32 | TO_TIMESTAMP_TZ | 兼容 | 将给定的字符串转换为TIMESTAMP WITH TIME ZONE类型的值 | |
33 | TO_YMINTERVAL | 兼容 | 将给定的字符串转换为INTERVAL MONTH TO YEAR类型的值 | |
34 | UNISTR | 兼容 | 以国际字符集返回给定的字符数据 |
(七)大对象函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | BFILENAME | 兼容 | 返回与服务器文件系统上的物理 LOB 二进制文件相关联的 BFILE定位器 |
2 | EMPTY_BLOB | 兼容 | 返回空BLOB |
3 | EMPTY_CLOB | 兼容 | 返回空CLOB |
(八)集合函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | CARDINALITY | 兼容 | 返回嵌套表中元素的个数 |
(九)层次函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | SYS_CONNECT_BY_PATH | 兼容 | 仅在分层查询中有效,返回列值从根节点到节点的路径 |
(十)XML函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | EXISTSNODE | 兼容 | 检查XPath指定的XML节点是否存在,若存在,返回1;若不存在,返回0 |
2 | EXTRACT(XML) | 兼容 | 返回XPath指定的一个节点下的所有值 |
3 | EXTRACTVALUE | 兼容 | 返回XPath指定一个节点下的一个值 |
4 | XMLAGG | 兼容 | 函数XMLAGG是一个聚集函数。它将聚集函数调用的输入值串接起来,允许表中数据跨行串接 |
5 | XMLCOMMENT | 兼容 | 创建一个XML值,它包含一个使用指定文本作为内容的XML注释 |
6 | XMLCONCAT | 兼容 | 由单个XML值组成的列表串接成一个单独的值,这个值包含一个XML内容片段 |
7 | XMLELEMENT | 兼容,但有差异 | 使用给定名称、属性和内容生成一个XML元素,语法详见 XMLELEMENT |
8 | XMLEXISTS | 兼容 | 返回XPath表达式指定的节点是否存在 |
9 | XMLFOREST | 兼容 | 使用给定名称和内容产生一个元素的XML森林(序列) |
10 | XMLPARSE | 兼容 | 解析XML |
11 | XMLPI | 兼容 | 创建一个XML处理指令。如果存在content,content不能包含字符序列 |
12 | XMLSEQUENCE | 兼容 | 接收一个XML实例,返回一个XML数组,配合table()函数,可以将数组转换为表的形式查询 |
13 | XMLSERIALIZE | 兼容 | 将XML数据转换为字符串形式 |
14 | XMLTABLE | 兼容 | 将XML数据转换为表的形式 |
15 | APPENDCHILDXML | 兼容 | 将value_expr提供的值作为XPath表达式指示的节点的子节点附加到目标XML上 |
16 | DELETEXML | 兼容 | 删除XML实例中与XPath表达式匹配的节点 |
17 | INSERTCHILDXML | 兼容 | 将value_expr提供的值作为XPath指定节点的子节点插入到XML实例中 |
18 | INSERTCHILDXMLAFTER | 兼容 | 将value_expr提供的一个或多个集合元素作为XPath指定的目标父元素的子元素插入到child_expr指定的现有集合元素之后 |
19 | INSERTCHILDXMLBEFORE | 兼容 | 将value_expr提供的一个或多个集合元素作为XPath指定的目标父元素的子元素插入到child_expr指定的现有集合元素之前 |
20 | INSERTXMLAFTER | 兼容 | 将value_expr提供的值插入到XPath指定的节点之后 |
21 | INSERTXMLBEFORE | 兼容 | 将value_expr提供的值插入到XPath指定的节点之前 |
22 | UPDATEXML | 兼容 | 将XML实例、XPath及新的XML值对作为参数,返回具有更新值的XML实例 |
23 | PATH | 兼容 | 用于定位XML文档中的节点位置等 |
24 | XMLROOT | 兼容 | 用于指定XML文档的根元素 |
说明:以下函数为Oracle新版本已废弃特性,为兼容旧版本,KingbaseES仍然支持:
- APPENDCHILDXML
- DELETEXML
- INSERTXMLBEFORE
- INSERTXMLAFTER
- INSERTCHILDXMLBEFORE
- INSERTCHILDXMLAFTER
- INSERTCHILDXML
- UPDATEXML
(十一)JSON函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | JSON_ARRAY | 兼容 | 通过SQL或者JSON数据构建一个JSON 数组 |
2 | JSON_ARRAYAGG | 兼容 | JSON_ARRAYAGG是一个聚集函数,将一列SQL表达式作为输入,将每个表达式转换为JSON值,并返回包含这些JSON值的单个JSON数组 |
3 | JSON Type Constructor | 兼容 | 把输入的字符串按JSON或JSONB类型返回 |
4 | JSON_OBJECT | 兼容 | 将一系列键值对或一个对象类型实例作为其输入,返回一个JSON对象,其中包含每个键值对的对象成员 |
5 | JSON_OBJECTAGG | 兼容 | JSON_OBJECTAGG是一个聚集函数,属性键值对作为其输入,该函数为每个键值对构造一个对象成员,并返回一个包含这些对象成员的JSON对象 |
6 | JSON_QUERY | 兼容 | 从一段给定的文本中获取所需要的值,返回值可以为一个值也可以为多个值 |
7 | JSON_SCALAR | 兼容 | JSON_SCALAR接受SQL标量值作为输入,并返回相应的JSON标量值作为JSON格式类型实例 |
8 | JSON_SERIALIZE | 兼容 | 将SQL数据类型(JSON、VARCHAR2、CLOB或BLOB)的JSON数据作为输入,并返回其文本表示 |
9 | JSON_TABLE | 兼容 | JSON_TABLE创建JSON数据的关系视图 |
10 | JSON_VALUE | 兼容 | 从一段给定的JSON文本中获取所需要的值,返回为标量值或者用户自定义的OBJECT或者COLLECTION类型 |
(十二)编码解码函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | DECODE | 兼容 | 将 expr 和 search 值进行比较。如果相等则返回result;如果不等返回default值,如果省略默认值,则返回空值(NULL) |
2 | ORA_HASH | 兼容 | 计算给定表达式的哈希值 |
(十三)NULL相关函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | COALESCE | 兼容 | 返回参数列表中的第一个非NULL值 |
2 | LNNVL | 兼容 | 用于WHERE条件中,condition为真时返回假,假时返回真 |
3 | NANVL | 兼容 | 为值为NaN的参数提供一个默认值 |
4 | NULLIF | 兼容,但有差异 | 比较两个参数,若参数相等就返回NULL,否则返回第一个参数。KingbaseES:两个参数可以为NULL;Oracle:两个参数不可以为NULL |
5 | NVL | 兼容 | 当第一个参数为NULL时,用第二个参数代替本表达式的值 |
6 | NVL2 | 兼容 | 当第一个参数为NULL时,返回第三个参数的值,否则返回第二个参数的值 |
(十四)环境和标识符函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | SYS_CONTEXT | 兼容 | 返回当前时刻与给定上下文相关联的给定的参数的值 |
2 | SYS_GUID | 兼容 | 返回一个全局唯一的标识符 |
3 | UID | 兼容 | 返回当前会话的用户的唯一标识 |
4 | USER | 兼容 | 返回当前会话的用户名称 |
5 | USERENV | 兼容 | 返回有关当前会话的信息 |
(十五)聚集函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | ANY_VALUE | 兼容 | 根据 GROUP BY 规范返回每个组中的任何值 |
2 | AVG | 兼容 | 所有输入值的平均值(算术平均) |
3 | CORR | 兼容 | 相关系数 |
4 | COUNT | 兼容 | 非空的输入行的数目 |
5 | COVAR_POP | 兼容 | 总体协方差 |
6 | COVAR_SAMP | 兼容 | 样本协方差 |
7 | CUME_DIST | 兼容 | 当前行的相对排名 |
8 | DENSE_RANK | 兼容 | 不带间隙的当前行排名 |
9 | FIRST | 兼容 | 获取首行(可能有并列的情况)的非排序字段的值 |
10 | GROUPING | 兼容 | 在分组查询中标识所有的行 |
11 | GROUPING_ID | 兼容 | 返回与行关联的 GROUPING 位向量对应的数字 |
12 | JSON_ARRAYAGG | 兼容 | JSON_ARRAYAGG是一个聚集函数,将一列SQL表达式作为输入,将每个表达式转换为JSON值,并返回包含这些JSON值的单个JSON数组 |
13 | JSON_OBJECTAGG | 兼容 | JSON_OBJECTAGG是一个聚集函数,属性键值对作为其输入,该函数为每个键值对构造一个对象成员,并返回一个包含这些对象成员的JSON对象 |
14 | LAST | 兼容 | 获取尾行(可能有并列的情况)的非排序字段的值 |
15 | LISTAGG | 兼容 | 输入值连接成一个串,用定界符分隔 |
16 | MAX | 兼容 | 所有输入值中表达式的最大值 |
17 | MIN | 兼容 | 所有输入值中的表达式的最小值 |
18 | PERCENT_RANK | 兼容 | 假想行的相对排名,范围从0 到 1 |
19 | PERCENTILE_CONT | 兼容 | 连续百分率 |
20 | PERCENTILE_DISC | 兼容 | 离散百分率 |
21 | RANK | 兼容 | 假想行的排名,为重复的行留下间隔 |
22 | REGR_ (Linear Regression) Functions | 兼容 | 用于对一组数字对拟合最小二乘回归线 |
23 | STDDEV | 兼容 | 输入值的样本标准偏差 |
24 | STDDEV_POP | 兼容 | 输入值的总体标准偏差 |
25 | STDDEV_SAMP | 兼容 | 输入值的样本标准偏差 |
26 | SUM | 兼容 | 所有输入的表达式的和 |
27 | VAR_POP | 兼容 | 输入值的总体方差 |
28 | VAR_SAMP | 兼容 | 输入值的样本方差 |
29 | VARIANCE | 兼容 | var_samp的历史别名 |
30 | XMLAGG | 兼容 | 函数XMLAGG是一个聚集函数。它将聚集函数调用的输入值串接起来,允许表中数据跨行串接 |
(十六)分析函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | AVG | 兼容 | 所有输入值的平均值(算术平均) |
2 | CORR | 兼容 | 相关系数 |
3 | COUNT | 兼容 | 非空的输入行的数目 |
4 | COVAR_POP | 兼容 | 总体协方差 |
5 | COVAR_SAMP | 兼容 | 样本协方差 |
6 | CUME_DIST | 兼容 | 当前行的相对排名 |
7 | DENSE_RANK | 兼容 | 不带间隙的当前行排名 |
8 | FIRST | 兼容 | 获取首行(可能有并列的情况)的非排序字段的值 |
9 | FIRST_VALUE | 兼容 | 返回一组排序值后的第一个值的分析函数 |
10 | LAG | 兼容 | 返回value,它在分区内当前行的之前offset个位置的行上计算;如果没有这样的行,返回default替代。(作为value必须是相同类型)。offset和default都是根据当前行计算的结果。如果忽略它们,则offset默认是1,default默认是空值 |
11 | LAST | 兼容 | 获取尾行(可能有并列的情况)的非排序字段的值 |
12 | LAST_VALUE | 兼容 | 返回一组排序值后的最后一个值的分析函数 |
13 | LEAD | 兼容 | 返回value,它在分区内当前行的之后offset个位置的行上计算;如果没有这样的行,返回default替代。(作为value必须是相同类型)。offset和default都是根据当前行计算的结果。如果忽略它们,则offset默认是1,default默认是空值 |
14 | LISTAGG | 兼容 | 输入值连接成一个串,用定界符分隔 |
15 | MAX | 兼容 | 所有输入值中表达式的最大值 |
16 | MIN | 兼容 | 所有输入值中的表达式的最小值 |
17 | NTH_VALUE | 兼容 | 返回在窗口帧中第nth行(行从1计数)上计算的value;没有这样的行则返回空值 |
18 | NTILE | 兼容 | 从1到参数值的整数范围,尽可能等分分区 |
19 | PERCENT_RANK | 兼容 | 假想行的相对排名,范围从0 到 1 |
20 | PERCENTILE_CONT | 兼容 | 连续百分率 |
21 | PERCENTILE_DISC | 兼容 | 离散百分率 |
22 | RANK | 兼容 | 假想行的排名,为重复的行留下间隔 |
23 | REGR_ (Linear Regression) Functions | 兼容 | 用于对一组数字对拟合最小二乘回归线 |
24 | ROW_NUMBER | 兼容 | 当前行在其分区中的行号,从1计 |
25 | STDDEV | 兼容 | 输入值的样本标准偏差 |
26 | STDDEV_POP | 兼容 | 输入值的总体标准偏差 |
27 | STDDEV_SAMP | 兼容 | 输入值的样本标准偏差 |
28 | SUM | 兼容 | 所有输入的表达式的和 |
29 | VAR_POP | 兼容 | 输入值的总体方差 |
30 | VAR_SAMP | 兼容 | 输入值的样本方差 |
31 | VARIANCE | 兼容 | var_samp的历史别名 |
(十七)对象引用函数
序号 | Oracle函数名 | KingbaseES是否兼容 | 功能简要说明 |
---|---|---|---|
1 | VALUE | 兼容 | 将对象表的一行相关联的关联变量 (表别名)作为参数,并返回存储在对象表中的对象实例 |
四、系统视图
本节主要介绍 KingbaseES 数据库的 Oracle 模式对于 Oracle 数据库视图的兼容程度,当前 KingbaseES 已兼容 Oracle 部分静态数据字典视图及部分动态性能视图。
(一)静态数据字典视图
KingbaseES 数据库兼容 Oracle 数据库的静态数据字典视图列表如下:
视图名 | 用途 |
---|---|
ALL_ALL_TABLES | 描述当前用户可以访问的对象表和关系表 |
ALL_ARGUMENTS | 列出了当前用户可以访问的过程和函数的参数 |
ALL_COL_COMMENTS | 描述当前用户可访问的所有序列 |
ALL_COL_PRIVS | 当前用户下可以查看的所有列级权限,既包括 USER_COL_PRIVS中的内容,同时也包含 GRANTEE 是当前角色的列级权限 |
ALL_CONS_COLUMNS | 描述当前用户可访问的所有约束的列 |
ALL_CONSTRAINTS | 描述当前用户可以访问的表上的约束定义 |
ALL_DB_LINKS | 数据库中dblink外部链接的信息 |
ALL_DIRECTORIES | 数据库中目录信息 |
ALL_IND_COLUMNS | 描述当前用户所能获取到的表上建有索引的列信息 |
ALL_INDEXES | 描述当前用户所能获取到的表上的索引信息 |
ALL_OBJECTS | 当前用户下可以查看的所有对象 |
ALL_PART_TABLES | 显示当前用户所拥有及能访问到的所有分区表,其字段与 DBA_PART_TABLES相同 |
ALL_SCHEDULER_EXCEPTION | 记录用户可访问的处于异常状态的schedule作业信息。视图结构与 DBA_SCHEDULER_EXCEPTION 相同 |
ALL_SCHEDULER_JOB_LOG | 记录用户可访问的schedule中作业的日志信息。视图结构与 DBA_SCHEDULER_JOB_LOG相同 |
ALL_SCHEDULER_JOB_RUN_DETAILS | 记录用户可访问的schedule中作业的详细日志信息。视图结构与 DBA_SCHEDULER_JOB_RUN_DETAILS 相同 |
ALL_SCHEDULER_JOBS | 记录用户可访问的schedule的作业的信息。视图结构与 DBA_SCHEDULER_JOBS相同 |
ALL_SCHEDULER_PROGRAMS | 记录用户可访问的scheduler存储过程的信息。视图结构与 DBA_SCHEDULER_PROGRAMS 相同 |
ALL_SCHEDULER_SCHEDULES | 记录用户可访问的scheduler计划的信息。视图结构与 DBA_SCHEDULER_SCHEDULES 相同 |
ALL_SEQUENCES | 描述当前用户可访问的所有序列 |
ALL_SOURCE | 描述当前用户可访问的存储对象的文本源 |
ALL_SYNONYMS | 描述当前用户所能查看的同义词信息 |
ALL_TAB_COLS | 描述了当前用户可以访问的表,视图的列。视图结构与 DBA_TAB_COLS相同 |
ALL_TAB_COLUMNS | 描述了当前用户可以访问的表,视图的非隐藏列。视图结构与 DBA_TAB_COLUMNS相同 |
ALL_TAB_COMMENTS | 在当前用户可以访问的表和视图上显示注释 |
ALL_TAB_PARTITIONS | 显示当前用户所拥有的所有分区,字段与 DBA_TAB_PARTITIONS 相同 |
ALL_TAB_PRIVS | 描述当前用户对所有对象授予。视图结构与 DBA_TAB_PRIVS相同 |
ALL_TABLES | 当前用户下可以查看的所有表 |
ALL_TRIGGER_COLS | 描述当前用户可访问的所有触发器的列 |
ALL_TRIGGERS | 描述当前用户可访问的所有触发器 |
ALL_TYPES | 描述当前用户可以访问的对象表和关系表 |
ALL_USERS | 列出当前用户可见的数据库的所有用户 |
ALL_VIEWS | 描述当前用户所能查看的所有的视图信息 |
DBA_ALL_TABLES | 描述当前数据库所有的对象表和关系表。视图结构与 ALL_ALL_TABLES相同 |
DBA_ARGUMENTS | 列出数据库中可用的过程和函数的参数。视图结构与 ALL_ARGUMENTS结构相同 |
DBA_COL_COMMENTS | 在数据库中所有表和视图的列上显示注释。视图结构与 ALL_COL_COMMENTS相同 |
DBA_COL_PRIVS | 所有列级权限。与 ALL_COL_PRIVS 视图结构相同 |
DBA_CONS_COLUMNS | 描述约束中指定的数据库中的所有列。视图结构与 ALL_CONS_COLUMNS相同 |
DBA_CONSTRAINTS | 描述当前用户所拥有的表的所有约束定义。视图结构与 ALL_CONSTRAINTS相同 |
DBA_DB_LINKS | 数据库中dblink外部链接的信息。视图结构与 ALL_DB_LINKS相同 |
DBA_DIRECTORIES | 数据库目录信息。视图结构与 ALL_DIRECTORIES 相同 |
DBA_FREE_SPACE | 数据库中每个表空间的可用空间 |
DBA_IND_COLUMNS | 数据库中所有建有索引的列的信息。视图结构与 ALL_IND_COLUMNS相同 |
DBA_INDEXES | 数据库中所有索引的信息。视图结构与 ALL_INDEXES 相同 |
DBA_OBJECTS | 当前用户下可以查看的所有对象 |
DBA_PART_TABLES | 显示数据库内所有分区表,其字段与 ALL_PART_TABLES 相同 |
DBA_ROLE_PRIVS | 授予所有用户的角色以及数据库中的角色 |
DBA_ROLES | 列出数据库中存在的所有角色 |
DBA_SCHEDULER_EXCEPTION | 记录数据库中所有处于异常状态的schedule作业信息 |
DBA_SCHEDULER_JOB_LOG | 记录数据库中所有schedule中作业的日志信息 |
DBA_SCHEDULER_JOB_RUN_DETAILS | 记录数据库中所有schedule中作业的详细日志信息 |
DBA_SCHEDULER_JOBS | 记录数据库中所有schedule的作业的信息 |
DBA_SCHEDULER_PROGRAMS | 记录数据库中所有scheduler存储过程的信息 |
DBA_SCHEDULER_SCHEDULES | 记录数据库中所有scheduler计划的信息 |
DBA_SEQUENCES | 数据库中所有的序列。视图结构与 ALL_SEQUENCES 相同 |
DBA_SOURCE | 描述数据库中所有存储对象的文本源。视图结构与 ALL_SOURCE相同 |
DBA_SYNONYMS | 数据库中所有同义词的信息。视图结构与 ALL_SYNONYMS 相同 |
DBA_TAB_COLS | 描述当前所在数据库中,所有的表、视图的列信息 |
DBA_TAB_COLUMNS | 描述当前所在数据库中,所有的表、视图的非隐藏列信息 |
DBA_TAB_COMMENTS | 显示数据库中所有表和视图的注释。视图结构与 ALL_TAB_COMMENTS相同 |
DBA_TAB_PARTITIONS | 显示DBA所拥有的所有分区。视图结构与 ALL_TAB_PARTITIONS 相同 |
DBA_TAB_PRIVS | 描述数据库中的所有对象授予。视图结构与 ALL_TAB_PRIVS相同 |
DBA_TABLES | 当前数据库中的所有表 |
DBA_TABLESPACE | 描述数据库中的表空间。视图结构与 DBA_TABLESPACES 相同 |
DBA_TABLESPACES | 描述数据库中的所有表空间 |
DBA_TRIGGER_COLS | 数据库中所有触发器的列。视图结构与 ALL_TRIGGER_COLS 相同 |
DBA_TRIGGERS | 数据库中所有的触发器。视图结构与 ALL_TRIGGERS 相同 |
DBA_TYPES | 描述当前数据库所有的对象类型。视图结构与 ALL_TYPES 相同 |
DBA_USERS | 数据库中所有用户的信息 |
DBA_VIEWS | 当前用户的所有视图的信息。视图结构与 ALL_VIEWS 的区别只是没有OWNER列 |
USER_ALL_TABLES | 描述当前用户拥有的对象表和关系表。视图结构与 ALL_ALL_TABLES相同 |
USER_ARGUMENTS | 描述当前用户拥有的过程和函数的参数。视图结构与 ALL_ARGUMENTS的区别只是没有OWNER列 |
USER_COL_COMMENTS | 在当前用户拥有的表和视图的列上注释。视图结构与 ALL_COL_COMMENTS的区别只是没有OWNER列 |
USER_COL_PRIVS | 当前用户下的列级权限表。与 ALL_COL_PRIVS 视图结构相同 |
USER_CONS_COLUMNS | 描述当前用户拥有并在约束中指定的列。视图结构与 ALL_CONS_COLUMNS相同 |
USER_CONSTRAINTS | 描述当前用户所拥有的表的所有约束定义。视图结构与 ALL_CONSTRAINTS相同 |
USER_DB_LINKS | 当前用户拥有的dblink信息。视图结构与 ALL_DB_LINKS 相同 |
USER_DIRECTORIES | 当前用户可访问的数据库目录信息。视图结构与 ALL_DIRECTORIES相同 |
USER_FREE_SPACE | 描述当前用户可访问的表空间中的自由扩展区。其列与 DBA_FREE_SPACE中的列相同 |
USER_IND_COLUMNS | 数据库中所有建有索引的列的信息。视图结构与 ALL_IND_COLUMNS相同 |
USER_INDEXES | 当前用户拥有的所有索引信息。视图结构与 ALL_INDEXES 相同 |
USER_OBJECTS | 当前用户的所有对象的信息 |
USER_PART_TABLES | 显示当前用户所拥有的所有分区表,除了不显示owner字段,其他字段与ALL_PART_TABLES相同 |
USER_ROLE_PRIVS | 描述授予当前用户的角色 |
USER_SCHEDULER_EXCEPTION | 记录用户拥有的处于异常状态的schedule作业信息。视图结构与 DBA_SCHEDULER_EXCEPTION 相同 |
USER_SCHEDULER_JOB_LOG | 记录用户拥有的schedule中作业的日志信息。视图结构与 DBA_SCHEDULER_JOB_LOG相同 |
USER_SCHEDULER_JOB_RUN_DETAILS | 记录用户拥有的schedule中作业的详细日志信息。视图结构与 DBA_SCHEDULER_JOB_RUN_DETAILS 相同 |
USER_SCHEDULER_JOBS | 记录用户拥有的schedule的作业的信息。视图结构与 DBA_SCHEDULER_JOBS相同 |
USER_SCHEDULER_PROGRAMS | 记录用户拥有的scheduler存储过程的信息。视图结构与 DBA_SCHEDULER_PROGRAMS 相同 |
USER_SCHEDULER_SCHEDULES | 记录用户拥有的scheduler计划的信息。视图结构与 DBA_SCHEDULER_SCHEDULES 相同 |
USER_SEQUENCES | 当前用户的所有序列的信息。视图结构与 ALL_SEQUENCES 相同 |
USER_SOURCE | 当前用户的所有程序源的信息。视图结构比 ALL_SOURCE少一个OWNER列 |
USER_SYNONYMS | 数据库中用户所有同义词的信息。视图结构与 ALL_SYNONYMS相同 |
USER_TAB_COLS | 描述了当前用户可以访问的表,视图的列。视图结构与 DBA_TAB_COLS的区别只是没有OWNER列 |
USER_TAB_COLUMNS | 数据库中所有表列的信息。视图结构与 DBA_TAB_COLUMNS 的区别只是没有OWNER列 |
USER_TAB_COMMENTS | 当前用户拥有的表和视图上的注释。视图结构与 ALL_TAB_COMMENTS的区别只是没有OWNER列 |
USER_TAB_PARTITIONS | 显示当前用户所拥有及能访问到的所有分区,除了无table_owner字段,其他字段与ALL_TAB_PARTITIONS 相同 |
USER_TAB_PRIVS | 描述当前用户的对象权限,该用户可以是对象的所有者、授予者或者被授予者。视图结构与DBA_TAB_PRIVS相同 |
USER_TABLES | 当前用户的所有表的信息。与 ALL_TABLES的视图结构的区别只是没有OWNER列 |
USER_TABLESPACE | 描述当前用户可访问的表空间。其列(除外PLUGGED_IN)与 DBA_TABLESPACE相同 |
USER_TABLESPACES | 描述当前用户可访问的表空间。其列(除外PLUGGED_IN)与 DBA_TABLESPACES相同 |
USER_TRIGGER_COLS | 当前用户用的所有触发器的列信息。视图结构与 ALL_TRIGGER_COLS相同 |
USER_TRIGGERS | 当前用户的所有触发器的信息。视图结构与 ALL_TRIGGERS的区别只是没有OWNER列 |
USER_TYPES | 描述当前用户可访问的对象类型。视图结构与 ALL_TYPES的区别只是没有OWNER列 |
USER_USERS | 描述当前用户可见的数据库的所有用户信息 |
USER_VIEWS | 当前用户的所有视图的信息。视图结构与 ALL_VIEWS 相同 |
RECYCLEBIN | 描述当前库下处于回收站中的对象信息和被删除的时间 |
兼容Oracle的静态数据字典视图的详细信息,请参见 兼容Oracle静态数据字典视图 章节。
(二)动态性能视图
KingbaseES 数据库兼容 Oracle 数据库的动态性能视图列表如下:
视图名 | 用途 |
---|---|
V$CONTEXT | 描述当前会话中context的属性值 |
V$DATABASE | 描述当前数据库信息 |
V$INSTANCE | 描述当前实例信息 |
V$LOCK | 列出了数据库当前持有的锁以及对锁的未完成请求 |
V$LOCKED_OBJECT | 描述当前被锁定的对象 |
V$SESSION | 描述当前会话信息 |
V$SYSSTAT | 描述当前系统统计信息 |
V$METRICGROUP | TPS、QPS视图度量分组说明 |
V$METRICNAME | TPS、QPS视图度量名称说明 |
V$METRIC | TPS、QPS视图度量值说明 |
V$METRIC_HISTORY | TPS、QPS视图度量值历史明细说明 |
V$SYSMETRIC | TPS、QPS视图系统度量值说明 |
V$SYSMETRIC_HISTORY | TPS、QPS视图系统度量值明细说明 |
V$SYSMETRIC_SUMMARY | TPS、QPS视图系统度量值摘要说明 |
五、总结
综上,本文围绕中电科金仓的 KingbaseES 数据库展开全面解析,先介绍了电科金仓的行业地位与技术实力 ------ 作为成立超 20 年的国产数据库 "国家队",其核心产品 KingbaseES(KES)不仅实现 100% 核心源代码自主,还多次斩获国家科技奖项、通过安全可靠测评,为产品性能与安全性奠定坚实基础。
核心内容聚焦 KingbaseES(Oracle 模式)的 Oracle 兼容性:基础层面,100% 覆盖 Oracle 常用能力,兼容 SQL 与 PL/SQL 语法、全部 Oracle 数据类型、大部分内置函数(部分存在细微差异)及部分静态数据字典视图与动态性能视图;高级层面,支持 ROWID、BFILE 等特殊类型,可实现 DBLink 同异构访问、物化视图等功能,同时兼容客户端编程接口及 Oracle XML/JSON 处理能力,还具备对等 GIS 空间数据处理能力。文中更以某大型商业银行核心信贷系统迁移为例,直观印证其 "应用无感平滑迁移" 优势 ------ 因兼容 Oracle 特有 PL/SQL 包与语法,仅需微调参数便完成迁移,且全程未中断前端业务,最终还提升系统响应速度。
全文结构清晰、细节详实,既展现了 KingbaseES 的技术兼容性与实用价值,也为开发者、技术决策者了解该数据库提供了从基础特性到实际应用的完整参考,是一份兼具技术深度与实践意义的指南。