这很简单,但我真的搞不清楚。
我正试图得到这个简单的表格:
NUMBER
1
2
3
所以我试试这个:
select (1,2,3) as number from dual;
我得到
ORA-00907:缺少右括号00907.00000-"缺少右括号"
如何创建此静态表?
编辑:对不起,我简化了表格,但应该更明确一些。我的数字不是1、2和3,而是大约50个介于1到10000之间的数字。听起来这是不可能的?
这个"技巧"可以做到:
select n
from (select rownum n from dual
connect by level <= 3);
从Oracle 10g开始,您可以执行以下操作:
SELECT LEVEL "NUMBER"
FROM DUAL
CONNECT BY LEVEL <= 3
显然,如果需要的话,可以很容易地修改它,生成比3更多的数字。
---编辑---
对于静态数字列表,您可以简单地:
SELECT 1 FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
UNION ALL
SELECT 3 FROM DUAL
-- etc...
或者,如果您需要从多个地方使用它,请将数据放在一个临时表中:
CREATE GLOBAL TEMPORARY TABLE TMP_TABLE (
"NUMBER" INT PRIMARY KEY
);
INSERT INTO TMP_TABLE VALUES (1);
INSERT INTO TMP_TABLE VALUES (2);
INSERT INTO TMP_TABLE VALUES (3);
SELECT * FROM TMP_TABLE;
我不知道你说的"我如何创建这个静态表?"
SQL> create table t (n number);
Table created.
SQL> insert into t values (1);
1 row created.
SQL> insert into t values (5000);
1 row created.
SQL> -- ....
SQL> insert into t values (10000);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
N
----------
1
5000
10000
使用双重:
SQL> select *
2 from (select 1 as n from dual
3 union all select 5000 from dual
4 -- ...
5 union all select 10000 from dual);
N
----------
1
5000
10000
请不要将列命名为number
。使用的保留字作为列名没有什么好处。