首页 > 解决方案 > 如何从 VARRAY 中检索数据并对其进行过滤

问题描述

例如,我必须从 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';

标签: sqloracleoracle19c

解决方案


您可以使用:

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为嵌套表(而不是 a VARRAY),那么您可以使用MEMBER OF运算符:

SELECT *
FROM   experiment
WHERE  'AC1' MEMBER OF seat;

但这不适用于VARRAYs 或关联数组。

db<>在这里摆弄


推荐阅读