有约束的列修改类型

本文为您介绍 Oracle 数据库和 OceanBase 数据库 Oracle 租户对于修改不同约束下的列的字段类型的不兼容场景。

说明
  • 本文表格中,OceanBase 数据库 Oracle 租户允许执行修改一列是经过类型映射后的结果。

  • 本文表格中,短横线(-)表示没有、all 表示全部类型。

主键(PRIMAEY KEY)约束下字段类型的修改

如果 主键 列中包含下表中的字段类型,通过 ALTER TABLE table_name MODIFY DDL,对该列进行字段类型修改操作,Oracle 数据库和 OceanBase 数据库 Oracle 租户的区别如下。

Oracle 数据库的字段类型

允许执行修改的类型

OceanBase 数据库 Oracle 租户的字段类型

允许执行修改的类型

INTEGER

all

NUMBER(38,0)

-

INT

all

NUMBER(38,0)

-

SMALLINT

all

NUMBER(38,0)

-

BINARY_FLOAT

all

BINARY_FLOAT

-

BINARY_DOUBLE

all

BINARY_DOUBLE

-

DECIMAL

all

NUMBER

-

DEC

all

NUMBER

-

NUMERIC

all

NUMBER

-

REAL

all

NUMBER

-

FLOAT

all

FLOAT

-

NUMBER

all

NUMBER

-

NCHAR

all

NCHAR

-

CHAR

all

CHAR

-

CHARACTER

all

CHAR(n)

-

NVARCHAR2

all

NVARCHAR2(size)

-

VARCHAR2

all

VARCHAR2

-

VARCHAR

all

VARCHAR2

-

RAW

all

RAW

-

ROWID

all

ROWID

UROWID

UROWID

all

UROWID

ROWID

TIMESTAMP

all

TIMESTAMP

-

DATE

all

DATE

-

INTERVAL YEAR TO MONTH

all

INTERVAL YEAR TO MONTH

-

INTERVAL DAY TO SECOND

all

INTERVAL DAY TO SECOND

-

唯一键(UNIQUE KEY)约束下字段类型的修改

如果 唯一键 列中包含上述表格中的字段类型,通过 ALTER TABLE table_name MODIFY DDL 对该列进行字段类型修改操作,Oracle 数据库和 OceanBase 数据库 Oracle 租户的区别与主键(PRIMAEY KEY)约束下字段类型的修改一致。

CHECK 约束下字段类型的修改

如果 CHECK 约束下的列中包含下表中的字段类型,通过 ALTER TABLE table_name MODIFY DDL,对该列进行字段类型修改操作,Oracle 数据库和 OceanBase 数据库 Oracle 租户的区别如下。

Oracle 数据库的字段类型

允许执行修改的类型

OceanBase 数据库 Oracle 租户的字段类型

允许执行修改的类型

INTEGER

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INT\SMALLINT

NUMBER(38,0)

-

INT

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INTEGER\SMALLINT

NUMBER(38,0)

-

SMALLINT

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INTEGER\INT

NUMBER(38,0)

-

BINARY_FLOAT

-

BINARY_FLOAT

-

BINARY_DOUBLE

-

BINARY_DOUBLE

-

DECIMAL

NUMERIC\NUMBER\DEC\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

DEC

NUMERIC\NUMBER\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

NUMERIC

NUMBER\DEC\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

REAL

NUMBER\DEC\DECIMAL\FLOAT\INT\SMALLINT\INTEGER

NUMBER

-

FLOAT

NUMERIC\NUMBER\DEC\DECIMAL\REAL\INT\SMALLINT\INTEGER

FLOAT

-

NUMBER

NUMERIC\DEC\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

NCHAR

CHAR\CHARACTER\NVARCHAR2\VARCHAR2\VARCHAR

NCHAR

-

CHAR

NCHAR\CHARACTER\NVARCHAR2\VARCHAR2\VARCHAR

CHAR

-

CHARACTER

NCHAR\CHAR\NVARCHAR2\VARCHAR2\VARCHAR

CHAR

-

NVARCHAR2

NCHAR\CHAR\CHARACTER\VARCHAR2\VARCHAR

NVARCHAR2

-

VARCHAR2

NCHAR\CHAR\CHARACTER\NVARCHAR2\VARCHAR

VARCHAR2

-

VARCHAR

NCHAR\CHAR\CHARACTER\NVARCHAR2\VARCHAR2

VARCHAR2

-

RAW

-

RAW

-

ROWID

-

ROWID

UROWID

UROWID

-

UROWID

ROWID

TIMESTAMP

DATE

TIMESTAMP

-

TIMESTAMP WITH LOCAL TIME ZONE

-

TIMESTAMP WITH LOCAL TIME ZONE

-

DATE

TIMESTAMP

DATE

-

INTERVAL YEAR TO MONTH

-

INTERVAL YEAR TO MONTH

-

INTERVAL DAY TO SECOND

-

INTERVAL DAY TO SECOND

-

外键(FOREIGN KEY)约束下字段类型的修改

如果 外键 列中包含下表中的字段类型,通过 ALTER TABLE table_name MODIFY DDL,对该列进行字段类型修改操作,Oracle 数据库和 OceanBase 数据库 Oracle 租户的区别如下。

Oracle 数据库的字段类型

允许执行修改的类型

OceanBase 数据库 Oracle 租户的字段类型

允许执行修改的类型

INTEGER

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INT\SMALLINT

NUMBER(38,0)

-

INT

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INTEGER\SMALLINT

NUMBER(38,0)

-

SMALLINT

NUMERIC\NUMBER\DECIMAL\DEC\FLOAT\REAL\INTEGER\INT

NUMBER(38,0)

-

BINARY_FLOAT

-

BINARY_FLOAT

-

BINARY_DOUBLE

-

BINARY_DOUBLE

-

DECIMAL

NUMERIC\NUMBER\DEC\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

DEC

NUMERIC\NUMBER\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

NUMERIC

NUMBER\DEC\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

REAL

NUMBER\DEC\DECIMAL\FLOAT\INT\SMALLINT\INTEGER

NUMBER

-

FLOAT

NUMERIC\NUMBER\DEC\DECIMAL\REAL\INT\SMALLINT\INTEGER

FLOAT

-

NUMBER

NUMERIC\DEC\DECIMAL\FLOAT\REAL\INT\SMALLINT\INTEGER

NUMBER

-

NCHAR

CHAR\CHARACTER

NCHAR

-

CHAR

NCHAR\CHARACTER

CHAR

-

CHARACTER

NCHAR\CHAR

CHAR

-

NVARCHAR2

VARCHAR2\VARCHAR

NVARCHAR2

-

VARCHAR2

NVARCHAR2\VARCHAR

VARCHAR2

-

VARCHAR

NVARCHAR2\VARCHAR2

VARCHAR2

-

RAW

-

RAW

-

ROWID

-

ROWID

UROWID

UROWID

-

UROWID

ROWID

TIMESTAMP

-

TIMESTAMP

-

TIMESTAMP WITH LOCAL TIME ZONE

-

TIMESTAMP WITH LOCAL TIME ZONE

-

DATE

-

DATE

-

INTERVAL YEAR TO MONTH

-

INTERVAL YEAR TO MONTH

-

INTERVAL DAY TO SECOND

-

INTERVAL DAY TO SECOND

-