簡體   English   中英

Oracle 中的 PostgreSQL 數組列

[英]PostgreSQL array column in Oracle

在 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<> 在這里擺弄


你知道這是否也可以是無限的嗎?

使用嵌套表:

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<> 在這里擺弄

您可以使用系統本身維護的數組數據類型,而不是自己定義。 像這樣的東西。 請注意語法差異:在 Oracle 中,您必須使用構造函數的類型名稱(您不能只給出值,它們必須在構造函數中給出)。

sys.odci*list 數組中的最大元素數為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM