Oracle SQL - считая до 3
Это легко, но я действительно не могу понять это.
Я пытаюсь получить эту простую таблицу:
NUMBER
1
2
3
Итак, я пытаюсь это:
select (1,2,3) as number from dual;
и я получаю
ORA-00907: пропущена правая скобка 00907. 00000 - "пропущена правая скобка"
Как я могу создать эту статическую таблицу?
РЕДАКТИРОВАТЬ: Извините, я упростил свою таблицу, но должен был быть более явным. Мои числа не 1, 2 и 3, они около 50 чисел где-то между 1 и 10000. Похоже, это не может быть сделано?
3 ответа
Этот "трюк" сделает это:
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
, Ничего хорошего не получится от использования зарезервированного слова в качестве имени столбца.