[英]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.