我有一个问题,我怎样才能使结果集只制作值列表。例如,我有这样的值:('1','2','3')
我想创建一个返回这样的表的SQL:
1
2
3
感谢。
[编辑]
抱歉错误的问题。 实际上列表不包含整数,但它包含字符串。 我目前需要('aa','bb,'cc')。
[/编辑]
答案 0 :(得分:3)
如果你想编写一个SQL语句,它将采用逗号分隔列表并生成任意数量的实际行,唯一真正的方法是使用一个表函数,它调用一个PL / SQL函数来分割输入字符串并将元素作为单独的行返回。
Check out this link用于表函数的介绍。
或者,如果您可以在客户端中以编程方式构造SQL语句,则可以执行以下操作:
SELECT 'aa' FROM DUAL
UNION
SELECT 'bb' FROM DUAL
UNION
SELECT 'cc' FROM DUAL
答案 1 :(得分:1)
最简单的方法是滥用保证有足够行数的表格。
-- for Oracle
select rownum from tab where rownum < 4;
如果无法做到这一点,请查看Oracle Row Generator Techniques。
我喜欢这个(需要10克):
select integer_value
from dual
where 1=2
model
dimension by ( 0 as key )
measures ( 0 as integer_value )
rules upsert ( integer_value[ for key from 1 to 10 increment 1 ] = cv(key) )
;
答案 2 :(得分:1)
我在各种数据库系统(不仅仅是SQL数据库)中使用过的一个技巧实际上是拥有一个只包含前100或1000个整数的表。这样的表很容易以编程方式创建,然后您的查询变为:
SELECT value FROM numbers WHERE value < 4 ORDER BY value
您可以将该表用于许多类似用途。
答案 3 :(得分:1)
我发现最好的方法是使用XML。
SELECT items.extract('/l/text()').getStringVal() item
FROM TABLE(xmlSequence(
EXTRACT(XMLType(''||
REPLACE('aa,bb,cc',',','')||'')
,'/all/l'))) items;
希望我能得到信任,但唉:http://pbarut.blogspot.com/2006/10/binding-list-variable.html。
基本上它的作用是将列表转换为xmldocument,然后将其解析出来。