这很容易,但我真的想不通。
我正在尝试获取这个简单的表格:
NUMBER
1
2
3
所以我试试这个:
select (1,2,3) as number from dual;
我得到
ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号”
如何创建这个静态表?
编辑:对不起,我简化了我的表格,但应该更明确。我的数字不是 1、2 和 3,它们是 1 到 10,000 之间的大约 50 个数字。听起来像这样不能做?
这很容易,但我真的想不通。
我正在尝试获取这个简单的表格:
NUMBER
1
2
3
所以我试试这个:
select (1,2,3) as number from dual;
我得到
ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号”
如何创建这个静态表?
编辑:对不起,我简化了我的表格,但应该更明确。我的数字不是 1、2 和 3,它们是 1 到 10,000 之间的大约 50 个数字。听起来像这样不能做?
这个“技巧”会做到:
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
。使用保留字 for 作为列名不会带来任何好处。