最近接到的任务,客户要求使用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代替

Logo

了解最新的技术洞察和前沿趋势,参与 OceanBase 定期举办的线下活动,与行业开发者互动交流

更多推荐