> 技术文档 > 兼容性再提升,效率再加速:KES Oracle兼容版强势升级!

兼容性再提升,效率再加速:KES Oracle兼容版强势升级!

目录

近日,KingbaseES V009R002C012 版本正式发布!

一、兼容能力与执行效率全面升级

1. SQL

(1)集合数据类型 ANYDATASET 的新增与应用

(2)优化字符串拼接函数 CONCAT

(3)增强日期时间处理能力

(4)兼容 Oracle 高版本 LISTAGG 函数用法

(5)系统视图兼容性增强

2. PLSQL

(1)支持用 NEW 初始化嵌套表和可变数组

(2)自动识别 %ROWTYPE 参数匹配

(3)简化确定性函数定义

(4)支持通过 PARALLEL_ENABLE 子句声明函数并发属性

(5)扩展 PACKAGE 包容量,最多支持近万个函数

三、客户端接口:多框架适配,开发更灵活

四、性能与安全能力增强,保障业务稳定运行

五、工具优化,提升开发效率

1. @ 命令:执行外部脚本

2. START 命令:启动脚本执行

3. SPOOL 命令:保存执行结果

4. 斜杠命令(/):重复执行上一条 SQL 语句

六、集群逻辑优化,提升运行效率

七、千行百业实践,平滑迁移最优选

总结


正文开始——

近日,KingbaseES V009R002C012 版本正式发布!

近年来,随着信息技术的飞速发展与数字化转型的加速,数据库作为信息系统的核心,扮演着愈加重要的角色。尤其是在国产化替代和安全合规的背景下,金仓数据库凭借其卓越的技术优势,逐步成为国内数据库领域的领军者。

金仓数据库始终聚焦各行业数字化转型需求,持续深耕兼容性与性能优化。近日,KingbaseES V009R002C012 版本正式发布!该版本在产品原有能力基础上,进一步强化对 Oracle 的兼容能力,覆盖 SQL、PLSQL、客户端接口等多维度,并在性能、功能等核心特性上持续优化,为用户带来更平滑的迁移体验与更稳定高效的数据库服务。

一、兼容能力与执行效率全面升级

1. SQL

针对 Oracle 模式下的数据类型、函数、语句等核心场景,本次版本实现多项兼容能力增强:

(1)集合数据类型 ANYDATASET 的新增与应用

新增集合数据类型 ANYDATASET,支持存储不同数据类型的动态集合,并扩展其成员函数与过程,轻松应对异构数据处理

在数据库系统中,集合数据类型的支持对于处理动态且异构的数据集非常关键。金仓数据库 V9 引入了 ANYDATASET 集合数据类型,它能够存储不同数据类型的动态集合,从而大大简化了异构数据的处理。

ANYDATASET 的优势与应用:

  • 灵活存储异构数据: 通过支持多种数据类型的动态集合,ANYDATASET 提供了比传统数据类型更高的灵活性。用户可以在同一个集合中存储不同类型的元素,避免了数据类型约束带来的问题。

  • 成员函数与过程扩展: 金仓数据库 V9 扩展了 ANYDATASET 类型的成员函数和过程,极大地方便了复杂数据的操作和处理。比如,可以使用 ANYDATASET 对象进行数据插入、删除、查询等操作,实现了与 Oracle 中集合数据类型的兼容。

-- 示例:创建并操作 ANYDATASET 类型集合DECLARE l_dataset ANYDATASET;BEGIN -- 初始化数据集,添加不同类型的数据 l_dataset := ANYDATASET(); l_dataset.add_element(1); l_dataset.add_element(\'Hello\'); l_dataset.add_element(SYSDATE); -- 输出数据集内容 FOR i IN 1..l_dataset.count LOOP DBMS_OUTPUT.put_line(l_dataset.get_element(i)); END LOOP;END;
(2)优化字符串拼接函数 CONCAT

优化字符串拼接函数 CONCAT,支持任意数量参数输入,拼接操作更灵活

在 SQL 编程中,字符串拼接是常见的操作。金仓数据库 V9 对 CONCAT 函数进行了优化,支持任意数量的参数输入,使得拼接操作更加灵活和高效。此前,Oracle 中的 CONCAT 函数只能拼接两个字符串,但金仓数据库 V9 的优化版本允许直接拼接多个字符串,减少了多个拼接函数调用的需要。

示例:

-- 示例:使用优化后的 CONCAT 函数拼接多个字符串SELECT CONCAT(\'Hello \', \'World\', \', \', \'Welcome \', \'to \', \'金仓数据库 V9!\') AS greeting FROM dual;

这种优化不仅减少了代码复杂度,还提高了拼接操作的执行效率,特别是在处理多列数据合并时,能够显著提高程序的执行效率。

(3)增强日期时间处理能力

增强日期时间处理能力,新增 TIMESTAMPADD 等计算函数,TO_TIMESTAMP 函数支持多格式符转换,满足复杂时间场景需求;

日期和时间的处理一直是数据库管理系统中的难点,尤其在涉及复杂的时间计算与转换时。金仓数据库 V9 引入了多个新功能,以增强日期时间的处理能力。

1.新增 TIMESTAMPADD 函数:
TIMESTAMPADD 函数可以轻松地对时间戳进行加减操作,支持增加或减少年、月、日、小时、分钟等单位,使得时间计算更加简便和精确。

示例:

-- 示例:使用 TIMESTAMPADD 增加 10 天SELECT TIMESTAMPADD(DAY, 10, SYSDATE) AS new_date FROM dual;

2.增强的 TO_TIMESTAMP 函数:
TO_TIMESTAMP 函数新增了对多种格式符的支持,允许用户根据不同的日期时间格式进行转换,满足复杂的时间场景需求。例如,支持将字符串 YYYY-MM-DDDD/MM/YYYY 等格式的日期时间字符串转换为 TIMESTAMP 类型。

示例:

-- 示例:使用 TO_TIMESTAMP 进行多格式符转换SELECT TO_TIMESTAMP(\'2025-08-23\', \'YYYY-MM-DD\') AS timestamp1 FROM dual;SELECT TO_TIMESTAMP(\'23/08/2025\', \'DD/MM/YYYY\') AS timestamp2 FROM dual;
(4)兼容 Oracle 高版本 LISTAGG 函数用法

兼容 Oracle 高版本 LISTAGG 函数用法,支持 WITH GROUP 子句可选,适配更多业务逻辑;

LISTAGG 是 Oracle 中广泛使用的聚合函数,用于将多行数据合并为一个单一的字符串。金仓数据库 V9 引入了对 Oracle 高版本 LISTAGG 函数的兼容,支持 WITH GROUP 子句的可选功能,使得 LISTAGG 在执行时更加灵活,适配更多业务逻辑。

示例:

-- 示例:使用 LISTAGG 函数将多行数据合并为一个字符串SELECT department_id, LISTAGG(employee_name, \', \') WITHIN GROUP (ORDER BY employee_name) AS employeesFROM employeesGROUP BY department_id;

通过增强对 LISTAGG 的支持,金仓数据库 V9 能够在处理大量数据的拼接与汇总时更加高效,并与 Oracle 高版本的用法保持一致。

(5)系统视图兼容性增强

新增兼容Oracle系统视图V$VERSION、V$SESSION、V$LOCKED_OBJECT、ALL_PART_INDEXES 、DBA__PART_INDEXES 、USER_PART_INDEXES等,进一步简化迁移难度;

为了简化用户的数据库迁移难度,金仓数据库 V9 兼容了多个 Oracle 系统视图,使得在迁移过程中,原有的数据库操作与查询能够顺利迁移至金仓数据库。

新增的兼容系统视图包括:

  • V$VERSION

  • V$SESSION

  • V$LOCKED_OBJECT

  • ALL_PART_INDEXES

  • DBA_PART_INDEXES

  • USER_PART_INDEXES

这些视图为数据库管理员提供了丰富的监控信息,方便系统的调试与管理。例如,V$VERSION 用于查询数据库的版本信息,V$SESSION 用于查看当前会话的信息,V$LOCKED_OBJECT 可以查看被锁定的对象,ALL_PART_INDEXESDBA_PART_INDEXESUSER_PART_INDEXES 用于管理和查询数据库中的分区索引。

-- 示例:查询当前数据库版本SELECT * FROM V$VERSION;-- 示例:查询当前锁定的对象SELECT * FROM V$LOCKED_OBJECT;

这些系统视图的引入不仅大大简化了数据库的管理与维护工作,还降低了从 Oracle 数据库迁移到金仓数据库的复杂度。

2. PLSQL

聚焦 PLSQL 语法兼容与开发体验优化,让 Oracle 迁移更顺畅:

(1)支持用 NEW 初始化嵌套表和可变数组

支持用 NEW 初始化嵌套表和可变数组,兼容 Oracle 集合变量初始化方式;

在 Oracle 中,嵌套表和可变数组作为集合数据类型,通常使用 NEW 关键字进行初始化。金仓数据库 V9 对这一语法进行了全面支持,使得在迁移过程中,用户可以继续使用熟悉的初始化方式,而无需修改大量现有代码。这一改进不仅提高了迁移效率,还帮助开发人员减少了复杂的数据结构初始化操作。

示例:

-- Oracle 中的集合变量初始化DECLARE TYPE emp_table_type IS TABLE OF employees%ROWTYPE; emp_table emp_table_type;BEGIN -- 使用 NEW 初始化嵌套表 emp_table := NEW emp_table_type(); -- 添加数据 emp_table.extend; emp_table(1).employee_id := 101; emp_table(1).employee_name := \'John Doe\';END;

通过该功能,开发人员在迁移 Oracle 数据库时,能够直接使用 Oracle 中的集合变量初始化方式,避免了不必要的代码修改和重构。

(2)自动识别 %ROWTYPE 参数匹配

调用存储过程时,自动识别不同表记录类型参数(% ROWTYPE)的匹配,减少代码调整成本;

Oracle 中的 %ROWTYPE 是一种便捷的数据类型,用于声明和操作表的记录类型。当在 PLSQL 中调用存储过程时,通常需要传入表的记录类型参数,金仓数据库 V9 自动识别这些记录类型参数的匹配关系,减少了开发人员在迁移过程中对存储过程代码的调整。

在 V9 中,数据库会根据存储过程签名自动推断传入参数的正确类型,无需开发人员显式地进行数据类型转换,极大地简化了代码和数据库迁移的复杂度。

示例:

-- Oracle 存储过程示例,使用 %ROWTYPE 参数CREATE OR REPLACE PROCEDURE update_employee_info( p_employee employees%ROWTYPE)ISBEGIN UPDATE employees SET employee_name = p_employee.employee_name, department_id = p_employee.department_id WHERE employee_id = p_employee.employee_id;END;
(3)简化确定性函数定义

简化确定性函数定义,仅需在包头声明 DETERMINISTIC 关键字,无需重复在包体中声明;

在 Oracle 中,定义一个确定性(deterministic)函数时,通常需要在包头和包体中都声明 DETERMINISTIC 关键字。而在金仓数据库 V9 中,只需在包头进行一次声明,无需在包体中重复声明。这一优化不仅提高了代码的简洁性,还减少了开发人员的维护负担。

-- 在金仓数据库 V9 中简化确定性函数定义CREATE OR REPLACE PACKAGE my_package IS FUNCTION calculate_salary(p_employee_id IN NUMBER) RETURN NUMBER DETERMINISTIC;END my_package;CREATE OR REPLACE PACKAGE BODY my_package IS FUNCTION calculate_salary(p_employee_id IN NUMBER) RETURN NUMBER IS v_salary NUMBER; BEGIN -- 计算薪资的逻辑 SELECT salary INTO v_salary FROM employees WHERE employee_id = p_employee_id; RETURN v_salary; END calculate_salary;END my_package;
(4)支持通过 PARALLEL_ENABLE 子句声明函数并发属性

支持通过 PARALLEL_ENABLE 子句声明函数并发属性,助力函数在多进程中安全调用,释放并行计算潜力;

为了充分利用现代多核处理器的计算能力,金仓数据库 V9 引入了 PARALLEL_ENABLE 子句,允许开发人员声明函数的并发执行属性。通过这一声明,金仓数据库能够在多进程环境下安全地并发执行这些函数,从而释放函数的并行计算潜力,提升系统的整体处理能力。

示例:

-- 使用 PARALLEL_ENABLE 子句声明函数的并发属性CREATE OR REPLACE FUNCTION process_data(p_data IN VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLEIS v_result VARCHAR2(100);BEGIN -- 执行数据处理逻辑 v_result := \'Processed: \' || p_data; RETURN v_result;END process_data;

这一功能特别适合处理大量计算密集型的任务,例如大数据分析、批量数据处理等,可以大幅提升函数的执行效率,减少响应时间。

(5)扩展 PACKAGE 包容量,最多支持近万个函数

扩展 PACKAGE 包容量,最多支持近万个函数,满足复杂业务封装需求。

在企业级应用中,数据库包(PACKAGE)通常会封装多个相关的函数、过程和常量。在金仓数据库 V9 中,PACKAGE 包的容量得到了显著扩展,最多支持近万个函数,能够满足复杂业务逻辑的封装需求。这对于那些包含大量业务处理逻辑的大型系统至关重要,避免了在不同包中拆分函数,确保了系统的高效性与可维护性。

示例:

-- 创建一个包含多个函数的大型包CREATE OR REPLACE PACKAGE large_package IS FUNCTION func1(p_value IN NUMBER) RETURN NUMBER; FUNCTION func2(p_value IN NUMBER) RETURN NUMBER; FUNCTION func3(p_value IN NUMBER) RETURN NUMBER; -- 继续定义更多的函数,直到达到包容量限制END large_package;

金仓数据库 V9 的这一增强功能,允许用户根据业务需求将更多的逻辑封装在一个包内,确保系统架构的简洁性与可扩展性。


三、客户端接口:多框架适配,开发更灵活

针对 JDBC、OCI、OCCI、Pro*C、NDP 等接口全面优化,降低应用适配难度:

  • JDBC 接口兼容 Oracle 参数定义模式,支持 IN/OUT 与 INOUT 模式灵活适配,提升存储过程调用稳定性;
  • OCI/OCCI 接口优化错误码与信息返回,支持按参数顺序号批量绑定同名参数,简化代码开发;
  • Pro*C 接口新增列元信息获取、多行数据批量获取等能力,提升 BLOB/CLOB 等复杂类型处理效率;
  • NDP 接口支持跨类型插入、批量 DML 操作,扩展数据适配场景,同时新增存储过程、触发器创建功能,兼容更全面。

四、性能与安全能力增强,保障业务稳定运行

  • 内核性能优化:支持聚合算子预排序、用户自定义函数并行执行,减少计算成本;优化统计视图,提升 SQL 调优效率;配置统计模块缓冲区,增强 DB TIME 模型准确性。
  • 并行计算优化: 优化DML并行处理,可将INSERT、DELETE、UPDATE、MERGE等DML操作拆分为并行任务,显着提升并发性能。
  • DB-LINK能力提升:支持使用DBLINK调用远程Oracle数据库的函数和存储过程,增强跨库访问能力,显着提升数据灵活性与处理效率。
  • 安全强化:提供用户级权限隔离,限制非授权对象访问,从源头降低数据泄露风险。

五、工具优化,提升开发效率

KSQL 命令行工具新增 @、START、SPOOL 及斜杠命令,兼容 Oracle 脚本执行与结果保存方式,降低运维人员学习成本。

1. @ 命令:执行外部脚本

金仓数据库 V9 支持使用 @ 命令直接执行外部的 SQL 脚本文件。用户可以将常用的数据库操作脚本保存在文件中,通过该命令批量执行,提高了工作效率。

示例:

SQL> @/path/to/script.sql

这种方式与 Oracle 一致,方便了脚本的执行和管理。


2. START 命令:启动脚本执行

@ 命令类似,START 命令也用于执行外部脚本文件。该命令操作简单,适合日常快速启动执行多个 SQL 语句。

示例:

SQL> START /path/to/script.sql

3. SPOOL 命令:保存执行结果

SPOOL 命令用于将查询结果保存到指定文件,方便记录查询结果或生成日志。它支持将执行的查询结果输出为文本文件,方便后续分析。

示例:

SQL> START /path/to/script.sql

4. 斜杠命令(/):重复执行上一条 SQL 语句

斜杠命令(/) 使得用户可以直接重复执行上一条 SQL 语句,减少了多次输入相同查询的操作,特别适合调试和反复运行查询时。

示例:

SQL> SELECT * FROM employees WHERE department_id = 10; SQL> / -- 重复执行上一条查询

六、集群逻辑优化,提升运行效率

在读写分离集群中,非自动提交模式的事务开启行为已调整为仅在主节点开启,避免备节点无效操作,减少资源消耗,提升集群运行效率。


七、千行百业实践,平滑迁移最优选

目前,KingbaseES 已在金融、能源、电信、医疗、政务、制造业等多个行业实现广泛深度应用,凭借卓越的兼容性与稳定性,成为 Oracle 迁移的优选方案。本次 KES Oracle兼容新版本的发布,进一步提升Oracle的平替能力,为用户提供“低难度、低成本、低风险” 平滑迁移体验。


总结

未来,金仓数据库将继续加强自主创新,致力于提升数据库的兼容性与性能,以满足不断变化的市场需求。公司将重点聚焦在与主流数据库的兼容性优化,确保用户在迁移和操作过程中能够享受更加顺畅和无缝的体验。同时,金仓数据库将不断推动性能突破,优化处理速度和响应能力,以适应大数据、云计算和人工智能等新兴技术带来的挑战。

通过持续的技术创新与优化,金仓数据库致力于成为企业数字化转型的核心支撑,助力各行业实现更高效的数字化管理,推动智能化、数据驱动的未来发展。