如何从 VARRAY 中检索数据并对其进行过滤
how to retrive data from VARRAY and filter it
例如,我必须从 Varray 检索特定数据
CREATE OR REPLACE TYPE class_t IS VARRAY(9) OF VARCHAR(5);/
create table exprement(name VARCHAR2(20), seat class_t);
insert into exprement(name,seat) values('JPZ',class_t('AC1','EC'));
insert into exprement(name,seat) values('ABC',class_t('GEN','EC'));
insert into exprement(name,seat) values('DFG',class_t('AC1','EC'));
我想检索 VARRAY 包含 AC1 的名称
我试过了select * from exprement where seat='AC1';
您可以使用:
SELECT name
FROM experiment e
WHERE EXISTS (SELECT 1 FROM TABLE(e.seat) WHERE COLUMN_VALUE = 'AC1');
或
SELECT name
FROM experiment e
CROSS APPLY TABLE (e.seat) s
WHERE s.COLUMN_VALUE = 'AC1';
顺便说一句,如果您将 seat
定义为嵌套的 table(而不是 VARRAY
),那么您可以使用 MEMBER OF
运算符:
SELECT *
FROM experiment
WHERE 'AC1' MEMBER OF seat;
但这不适用于 VARRAY
或关联数组。
db<>fiddle here
例如,我必须从 Varray 检索特定数据
CREATE OR REPLACE TYPE class_t IS VARRAY(9) OF VARCHAR(5);/
create table exprement(name VARCHAR2(20), seat class_t);
insert into exprement(name,seat) values('JPZ',class_t('AC1','EC'));
insert into exprement(name,seat) values('ABC',class_t('GEN','EC'));
insert into exprement(name,seat) values('DFG',class_t('AC1','EC'));
我想检索 VARRAY 包含 AC1 的名称
我试过了select * from exprement where seat='AC1';
您可以使用:
SELECT name
FROM experiment e
WHERE EXISTS (SELECT 1 FROM TABLE(e.seat) WHERE COLUMN_VALUE = 'AC1');
或
SELECT name
FROM experiment e
CROSS APPLY TABLE (e.seat) s
WHERE s.COLUMN_VALUE = 'AC1';
顺便说一句,如果您将 seat
定义为嵌套的 table(而不是 VARRAY
),那么您可以使用 MEMBER OF
运算符:
SELECT *
FROM experiment
WHERE 'AC1' MEMBER OF seat;
但这不适用于 VARRAY
或关联数组。
db<>fiddle here