KingbaseES数据库:兼容 SQL 语法及 Oracle 过程化语言的语法基础

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 的技术兼容性与实用价值,也为开发者、技术决策者了解该数据库提供了从基础特性到实际应用的完整参考,是一份兼具技术深度与实践意义的指南。

相关推荐
FinTech老王2 小时前
一场“无感换心”手术:金仓数据库如何让电子证照系统平滑告别MongoDB
数据库·mongodb
周杰伦的稻香2 小时前
MySQL中的空间碎片率计算分析
android·数据库·mysql
重启的码农2 小时前
kv数据库-leveldb (13) 缓存 (Cache)
数据库
重启的码农2 小时前
kv数据库-leveldb (12) 数据块 (Block)
数据库
lypzcgf2 小时前
Coze源码分析-资源库-创建数据库-后端源码-应用/领域/数据访问层
数据库·go·后台·coze·coze源码分析·ai应用平台·agent平台
枫叶丹42 小时前
金仓数据库替代MongoDB:电子证照系统国产化改造实战
数据库·mongodb
麦兜*2 小时前
Redis 7.0 新特性深度解读:迈向生产级的新纪元
java·数据库·spring boot·redis·spring·spring cloud·缓存
可涵不会debug3 小时前
金仓数据库:破解电子证照国产化难题,开启政务效能新篇
数据库·政务
元闰子3 小时前
对 Agent-First 数据库的畅想
数据库·后端·aigc