gpt4 book ai didi

sql - 在 Oracle 11g 查询中使用多列、多行表文字是否有一种非丑陋的方法?

转载 作者:行者123 更新时间:2023-12-01 15:24:07 25 4
gpt4 key购买 nike

我正在尝试对 Oracle 11g 的连接查询使用“文字”多列表。

这是我想出的最好的,基于 this answer (
this answer建议使用更好的语法,但据我所知,它仅适用于单列表):

SELECT * from
(
-- The ugly... it burns...
select 'APPLE' as n, 'FRUIT' as m from dual
union all select 'CARROT' as n, 'VEGGIE' as m from dual
union all select 'PEACH' as n, 'FRUIT' as m from dual
union all select 'CUCUMBER' as n, 'VEGGIE' as m from dual
union all select 'ORANGE' as n, 'FRUIT' as m from dual
)

在 Oracle 中创建多行多列文字表有没有一种不那么难看的方法?不幸的是,我 不能 创建临时表。
<rant>正如我所料,PostgreSQL 有一个 nice, sane syntax for literal tables ,但是甲骨文是一团糟。 </rant>
编辑:我试过 row-value constructor syntaxsuggested by @Mark Chesney但这也不起作用: select n,m from dual where (n,m) in (...)给我一个无效的标识符错误。

最佳答案

对于两列,您可以使用 ODCIObjectList:

select objectschema m, objectname n
from table(sys.ODCIObjectList(
sys.odciobject('APPLE', 'FRUIT'),
sys.odciobject('CARROT', 'VEGGIE'),
sys.odciobject('PEACH', 'FRUIT'),
sys.odciobject('CUCUMBER', 'VEGGIE'),
sys.odciobject('ORANGE', 'FRUIT')));

M N
---------- ----------
APPLE FRUIT
CARROT VEGGIE
PEACH FRUIT
CUCUMBER VEGGIE
ORANGE FRUIT

对于更多列,您可以定义自己的类型:
create type t as object (a varchar2(10), b varchar2(10), c number);
create type tt as table of t;

select * from table( tt (
t('APPLE', 'FRUIT', 1),
t('APPLE', 'FRUIT', 1122),
t('CARROT', 'VEGGIE', 3),
t('PEACH', 'FRUIT', 104),
t('CUCUMBER', 'VEGGIE', 5),
t('ORANGE', 'FRUIT', 6) ) )

A B C
---------- ---------- ----------
APPLE FRUIT 1
APPLE FRUIT 1122
CARROT VEGGIE 3
PEACH FRUIT 104
CUCUMBER VEGGIE 5
ORANGE FRUIT 6

关于sql - 在 Oracle 11g 查询中使用多列、多行表文字是否有一种非丑陋的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com