1

这很容易,但我真的想不通。

我正在尝试获取这个简单的表格:

NUMBER
1
2
3

所以我试试这个:

select (1,2,3) as number from dual;

我得到

ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号”

如何创建这个静态表?

编辑:对不起,我简化了我的表格,但应该更明确。我的数字不是 1、2 和 3,它们是 1 到 10,000 之间的大约 50 个数字。听起来像这样不能做?

4

3 回答 3

3

这个“技巧”会做到:

select n
from (select rownum n from dual
      connect by level <= 3);
于 2012-04-02T15:29:08.597 回答
1

从 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;
于 2012-04-02T15:33:25.987 回答
0

我不确定“如何创建这个静态表?”是什么意思。当我想到静态表时,我想到的是:

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 作为列名不会带来任何好处。

于 2012-04-02T15:56:06.643 回答