Oracle SQL - counting to 3



这很简单,但我真的搞不清楚。

我正试图得到这个简单的表格:

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。使用的保留字作为列名没有什么好处。

最新更新