OceanBase代替Oracle的踩坑记录

本文记录了使用OceanBase Oracle模式替换原有Oracle系统的实践过程。详细介绍了SQL脚本及语法差异,包括约束定义、DDL语法调整及INSERT语句的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近接到的任务,客户要求使用OceanBase代替Oracle,因此使用OceanBase的Oracle模式代替。记录一下这个过程中遇到的坑。

OceanBase版本:2.2.50

1.SQL脚本差异

主要区别是OceanBase不支持add constraint这种写法,需要写在括号内部。例如:
Oracle:

-- Create table
create table ACT_EVT_LOG
(
  log_nr_       NUMBER(19)   not null,
  type_         NVARCHAR2(64),
  proc_def_id_  NVARCHAR2(64),
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ACT_EVT_LOG
  add constraint PK_ACT_EVT_LOG primary key (LOG_NR_)
    using index
      tablespace TS_INDEX_TMS;

OceanBase:

create table ACT_EVT_LOG
(
  log_nr_       NUMBER(19)   not null,
  type_         NVARCHAR2(64),
  proc_def_id_  NVARCHAR2(64),
  constraint PK_ACT_EVT_LOG primary key (LOG_NR_) using index
);

目前已知的OceanBase不支持的ddl语法还有:

1.不支持novalidate
目前解决方式:去除该语法
2.不支持enable
目前解决方式:去除该语法

2.语法差异

不支持oracle的insert all语法,目前替代方案:
使用insert into foreach代替

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值