Oracle中的PostgreSQL数组列



在postgresql中,我可以执行以下操作:

create table test(
arrcolumn character varying(100)[]
)
insert into test(arrcolumn) values ('{bla,blubber}');

如何在oracle中创建相同的?

有一种叫做VARRAY的东西,但它似乎只在PL/sql过程和函数中的sql表中不起作用?

有一种叫做VARRAY的东西,但它似乎只在PL/sql过程和函数中的sql表中工作?

这是不正确的;它确实适用于表格。


定义您的数据类型:

CREATE TYPE string_array AS VARRAY(100) OF VARCHAR2(50);

然后在表格中使用:

CREATE TABLE test (
id        INT
GENERATED ALWAYS AS IDENTITY
PRIMARY KEY,
arrcolumn string_array
);

然后可以插入值:

INSERT INTO test (
arrcolumn
) VALUES (
string_array('bla', 'blubbler')
);

db<gt;小提琴这里


你知道这是否也可以是无限的吗?

使用嵌套表:

CREATE TYPE string_array AS TABLE OF VARCHAR2(50);
CREATE TABLE test (
id        INT
GENERATED ALWAYS AS IDENTITY
PRIMARY KEY,
arrcolumn string_array
) NESTED TABLE arrcolumn STORE AS test__arrcolumn;

或者你可以用两张桌子。

db<gt;小提琴这里

您可以使用由系统本身维护的数组数据类型,而不是定义自己的数据类型。像这样的东西。注意语法上的差异:在Oracle中,必须使用构造函数的类型名称(不能只给出值,它们必须在构造函数中给出(。

sys.odci*列表数组中的最大元素数为32767,这是毫无疑问的,因为无论出于何种原因,Oracle都会使用有符号的16位整数对数组进行索引。(为了与最旧版本兼容,我可以理解16位,但为什么签名?(

create table t (arrcolumn sys.odcivarchar2list);
insert into t (arrcolumn) values (sys.odcivarchar2list('bla', 'blubber'));
select * from t;
ARRCOLUMN                             
--------------------------------------
ODCIVARCHAR2LIST('bla', 'blubber')

然后,如果需要访问数组值(列中(中的元素,可以使用table运算符,例如:

select column_value from t, table(arrcolumn);
COLUMN_VALUE
------------
bla
blubber