我有以下数据: 1203 1222 3201 4300 哪些是产品数量,所以我需要选择它们作为表中的数据.. 我认为解决方案将使用双表.. 我尝试了以下代码:
Select * from { values '1203','1222','3201','4300'} as Table1
但它不起作用!
答案 0 :(得分:4)
Oracle有TABLE
函数,它将varray作为输入并返回一个匿名表(匿名表示"表格没有名称"),只有一列名为column_value
。
Oracle还有函数sys.odcinumberlist()
,它将逗号分隔的数字列表作为输入,并返回一组数字。 (同样,要生成varchar2值的varray,有sys.odcivarchar2list()
。)
要输入您的for值并使用名为num
的单个列(或您想要的任何其他名称)返回结果,您可以将这两个函数一起使用 - 并为select
中的列添加别名条款。像这样:
select column_value as num
from table( sys.odcinumberlist( 1203, 1222, 3201, 4300 ) )
;
NUM
----
1203
1222
3201
4300
答案 1 :(得分:3)
在标准 SQL中,您需要使用:
Select *
from (values ('1203','1222','3201','4300')) as Table1;
这将创建一个包含四个(字符)列的行。如果您打算返回四个行, 将:
Select *
from (values ('1203'),('1222'),('3201'),('4300')) as Table1
但是,Oracle NOT 支持该语法。它也不支持没有FROM子句的SELECT。
如果您想在Oracle中使用4列的单行,则需要
select '1203','1222','3201','4300'
from dual;
如果您需要四个行,则需要
select '1203'
from dual
union all
select '1222'
from dual
union all
select '3201'
from dual
union all
select '4300'
from dual;
此外:'1203'
不是“数字”。这是一个字符串。在SQL中编写而不带引号的数字文字:1203
是一个数字
答案 2 :(得分:2)
您也可以使用XMLTABLE
。
select TO_NUMBER(TRIM(COLUMN_VALUE)) as numbers from XMLTABLE( '1203,1222,3201,4300');
Numbers
-------
1203
1222
3201
4300
这仅适用于数字。
编辑:根据评论专家的建议,最好用to_number
包装。