Oracle Выберите числа из предложения IN - PullRequest
2 голосов
/ 18 мая 2009

Я ищу лучший способ выбора чисел непосредственно из предложения in.

В основном, как:

SELECT * FROM (2,6,1,8);

Это не работает. Я могу сделать это так:

SELECT Lv FROM (  SELECT Level LV
                  FROM DUAL
                  CONNECT BY Level < 20)
WHERE Lv IN (2,6,1,8);

Но это кажется немного неуклюжим. Есть ли более элегантный способ?

Ответы [ 3 ]

3 голосов
/ 19 мая 2009

Вы можете сделать

select column_value from table(sys.dbms_debug_vc2coll(1,2,3,4,5));

но это на самом деле возвращает varchar2. Вы можете создать свой собственный ТИП и использовать это

create type tab_num is table of number;
/
select column_value from table(tab_num(1,2,3,4,5));

Стоит также посмотреть на предложение MODEL. Это выглядит сложно, но очень хорошо генерирует данные

SELECT x from dual
MODEL DIMENSION BY (1 AS z) MEASURES (1 x)
  RULES ITERATE (7) (x[ITERATION_NUMBER]=ITERATION_NUMBER+1)
1 голос
/ 18 мая 2009

Более элегантно, если вы материализуете таблицу вспомогательных чисел:

SELECT num FROM numbers WHERE num IN (2,6,1,8);

И это также полезно в сочетании с другой таблицей.

Например, у меня был случай, когда мне нужно было заполнить большие таблицы конфигурации изменениями по кусочкам:

В листе или отчете Big SP или Excel указаны недостающие центры затрат в конфигурации, что дает большой набор результатов, которые необходимо вставить с различными данными в некоторых группах.

Вставить частичные результаты в отдельные списки, разделенные запятыми:

INSERT INTO {stuff}
SELECT {stuff}, 130 as line_item
FROM numbers
WHERE numbers.num IN ({pasted a section of results})

INSERT INTO {stuff}
SELECT {stuff}, 135 as line_item
FROM numbers
WHERE numbers.num IN ({pasted another section of results})
0 голосов
/ 18 мая 2009

Если вам явно не нужно предложение IN, вы можете использовать UNION:

  select 2 from dual
  union
  select 6 from dual
  union
  select 1 from dual
  union
  select 8 from dual

Существует более элегантный вариант для вставки нескольких строк в таблицу:

INSERT ALL
   INTO table (col) VALUES ('a')
   INTO table (col) VALUES ('b')
   INTO table (col) VALUES ('c')
SELECT * FROM dual;

Но я не знаю, как это сделать для SELECT.

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