将PostgreSQL列类型"text[]"转换为Oracle



我在PostgreSQL 中有一个表

CREATE TABLE DEPARTMENT(
name            text,
floor           text[]
);

样本数据:

name = 'CSE', floor = ['1-A', 1-B', '2-A'];
name = 'EEE', floor = ['2-B', '3-A'];

我想转换Oracle中的表,我需要第二列的帮助。什么是Oracle的TEXT[]等价物?

我有一些要求:

  1. (如果Oracle有(我想使我的数组类型为string[](我指的是TEXT[](。我不想有任何将INT推入阵列的范围
  2. (如果可能的话(请尽量不要使用raw(200)byte(200),因为我想要的类型严格为string
  3. 也建议我如果我能做一个VARCHAR2(200)的数组

[注意:

我以前在API上使用过.NET核心,所以,

string name;
string[] floor;

对PostgreSQL来说很好,我不想更改我的API代码,我只想为Oracle提供一个string[]等效类型(或基于何时需要使用int[](]

您可以在Oracle中将带有嵌套表的表声明为列

create type string_tbl is table of varchar2(200);
/
create table department (
name varchar2(10),
floor string_tbl
)
nested table floor store as floor_tbl;
/
insert into department( name, floor )
values( 'CSE', string_tbl( '1-A', '1-B', '2-A' ) );

然而,以这种方式定义数据模型几乎没有意义。有一个单独的floor表和一个department_floor映射表将部门映射到楼层几乎总是更有意义的(我假设一个楼层可以有多个部门(。尤其是当您试图支持具有相同代码库的多个数据库时。如果不引入嵌套表之类的东西,支持SQL的不同方言就足够困难了,因为嵌套表在不同的数据库中往往具有非常不同的语义。

根据PostgresSQL到Oracle的迁移工具和服务,text是一个

可变长度字符数据,⇐1G

并且是";迁移的";在Oracle中转换为CCD_ 14数据类型。

不过,您提供的值要小得多,所以我猜VARCHAR2可能会这样,例如varchar2(100)

最新更新