尊敬的IvorySQL技术支持团队:

您好!

我目前正在使用IvorySQL进行Oracle数据库的迁移适配测试,在使用过程中遇到了一些Oracle兼容性问题。现将测试发现的具体问题整理如下,希望贵团队能够给予技术支持或确认相关解决方案。

测试环境

  • 数据库版本:IvorySQL v5.3
  • 运行环境:Docker镜像 ivorysql/ivorysql:5.3-ubi8

问题详情

兼容模式切换问题

  • 问题描述:使用-m oracle参数启动数据库无效,连接1521端口也未自动进入Oracle模式,必须手动执行SET ivorysql.compatible_mode TO 'oracle';才能切换。
  • 咨询:这是设计如此还是配置问题?是否有更便捷的兼容模式切换方式?

REF CURSOR语法不支持

  • 问题SQL:CURSOR cursor_SeqPlanInfo IS xxx
  • 错误信息:ERROR: type "cursor_SeqPlanInfo" does not exist
  • 当前解决方案:改用PostgreSQL的 cursor_SeqPlanInfo CURSOR FOR xxx

包内不支持局部类型定义

  • 问题描述:在Package内部定义局部类型会报错,需要将类型创建为外部类型。

不支持AS OBJECT语法

  • 问题SQL:create TYPE T_IDOC_ITEM_TYPE AS OBJECT
  • 当前解决方案:改为create TYPE T_IDOC_ITEM_TYPE AS

类型属性不支持%TYPE

  • 问题SQL:在CREATE TYPE中使用CompNo BOM.CompNo%TYPE
  • 错误信息:ERROR: syntax error at or near "%" SQL state: 42601
  • 当前解决方案:直接指定具体类型如VARCHAR2

不支持TABLE OF语法

  • 问题SQL:create TYPE Table_SAPLineMatStatus IS TABLE OF Record_SAPLineMatStatus;
  • 错误信息:ERROR: syntax error at or near "IS" SQL state: 42601
  • 当前解决方案:改用PostgreSQL数组或SETOF语法

不支持PIPELINED函数

  • 当前解决方案:使用PostgreSQL的SETOF语法替代

不支持RETURN TABLE语法

  • 问题SQL:FUNCTION ProduceOrder_Divide(p_ProduceOrder IN VARCHAR2) RETURN Table_CutPOInfo;
  • 当前解决方案:使用PostgreSQL的数组或SETOF语法

技术咨询

  1. 上述语法不兼容是已知限制还是有计划在未来版本中支持?
  2. 是否有官方的Oracle迁移指南或语法对照文档?
  3. 对于包内局部类型的限制,是否有推荐的架构设计模式?

感谢贵团队开发如此优秀的开源数据库产品,期待IvorySQL在Oracle兼容性方面能够持续改进。



祝好!

刘世鑫    研发部

北京元工国际科技股份有限公司

电话:010-62987085        邮箱:liusx@intmes.com

网址:www.intmes.com   微博https://weibo.com/intmes

地址:北京市海淀区上地东路35号院1号楼1层颐泉汇大厦D129