Oracle 迁移至金仓常见兼容性问题处理

金仓 Oracle 兼容模式

KingbaseES 提供 Oracle 兼容模式,通过设置 database_mode = oracle 可兼容大量 Oracle 语法,但仍有部分差异需手工处理。

# 创建 Oracle 兼容模式数据库 CREATE DATABASE myapp_db TEMPLATE template0 ENCODING 'UTF8' WITH db_compatibility = 'oracle';

常见语法兼容问题

问题一:ROWNUM 用法

-- Oracle 写法 SELECT * FROM emp WHERE ROWNUM <= 10; -- 金仓标准写法(同时兼容 Oracle 模式下的 ROWNUM) SELECT * FROM emp LIMIT 10;

问题二:DATE 类型含时间部分

Oracle 的 DATE 同时存储日期和时间;金仓标准模式下 DATE 仅存储日期,Oracle 兼容模式下 DATE 等同于 TIMESTAMP。

-- 查看当前模式 SHOW database_mode; -- 若在标准模式,将字段类型改为 TIMESTAMP ALTER TABLE orders ALTER COLUMN created_at TYPE TIMESTAMP;

问题三:序列和自增字段

-- Oracle 写法(触发器 + 序列) CREATE SEQUENCE emp_id_seq START WITH 1; -- 金仓推荐写法(IDENTITY 列,更简洁) CREATE TABLE emp ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name VARCHAR(50) ); -- 兼容写法(Oracle 兼容模式下同样支持) CREATE TABLE emp ( id INTEGER DEFAULT emp_id_seq.nextval PRIMARY KEY, name VARCHAR(50) );

问题四:存储过程中的异常处理

-- Oracle 写法 EXCEPTION WHEN NO_DATA_FOUND THEN v_result := NULL; WHEN OTHERS THEN RAISE; -- 金仓兼容(Oracle 模式支持;标准模式需改为 KSQL 语法) EXCEPTION WHEN NO_DATA_FOUND THEN v_result := NULL; WHEN OTHERS THEN RAISE EXCEPTION '%', SQLERRM;

迁移工具推荐

工具 用途 备注
KDts(金仓数据迁移工具) Schema 和数据迁移 官方工具,可视化界面
KSQL Developer SQL 语法转换验证 内置 Oracle 语法检测
AWR 对比报告 迁移前后性能对比 需采集基线数据

迁移建议:按"存储过程 → 触发器 → 视图 → 应用 SQL"顺序逐层验证,每一层验证通过后再推进,避免问题堆积导致返工。
上一篇 MySQL查看数据库表容量大小
下一篇 什么是网络交换机?和路由器有啥区别?