Oracle中如何在SQL语句中选取Varray特定元素并添加ID约束?
解决Oracle VARRAY元素访问及带ID约束的查询问题
问题原因
直接执行select phones(1) from p_phones;报错,是因为Oracle SQL解析器会将phones识别为函数而非列名,需要通过表别名明确限定列所属的表。
单元素查询(带ID约束)
如果要获取指定p_id对应的第一个电话号码,使用表别名限定列后即可直接通过索引访问:
-- 获取p_id=1的第一个电话号码 select p.phones(1) as first_phone from p_phones p where p.p_id = 1;
展开VARRAY获取所有元素(带ID约束)
如果需要列出指定用户的所有电话号码,可以用TABLE()函数将VARRAY类型的列展开为行:
-- 获取p_id=1的所有电话号码 select p.p_id, ph.column_value as phone_number from p_phones p, table(p.phones) ph where p.p_id = 1;
如果只需要展开后的第一个号码,可添加行限制:
select p.p_id, ph.column_value as first_phone from p_phones p, table(p.phones) ph where p.p_id = 1 fetch first 1 row only;
内容的提问来源于stack exchange,提问作者user3474704
相关产品推荐
相关产品推荐

