Oracle SQL - считая до 3 - PullRequest
       7

Oracle SQL - считая до 3

1 голос
/ 02 апреля 2012

Это легко, но я действительно не могу понять.

Я пытаюсь получить эту простую таблицу:

NUMBER
1
2
3

Итак, я пытаюсь это:

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

и я получаю

ORA-00907: отсутствует правая скобка 00907. 00000 - «отсутствует правая скобка»

Как мне создать эту статическую таблицу?

РЕДАКТИРОВАТЬ: Извините, я упростил свою таблицу, но должен был быть более явным. Мои числа не 1, 2 и 3, они около 50 чисел где-то между 1 и 10000. Похоже, что это не может быть сделано?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Этот «трюк» сделает это:

select n
from (select rownum n from dual
      connect by level <= 3);
1 голос
/ 02 апреля 2012

Начиная с 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;
0 голосов
/ 02 апреля 2012

Я не уверен, что вы подразумеваете под "Как я могу создать эту статическую таблицу?" Когда я думаю о статических таблицах, я думаю о чем-то вроде:

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. Ничего хорошего не получится от использования зарезервированного слова в качестве имени столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...