Откуда поступают данные и что вы планируете делать с ними?
Если данные читаются из файла, вы обычно создаете внешнюю таблицу для чтения из файла или используете SQL * Loader или другой инструмент ETL для загрузки данных в промежуточную таблицу или коллекцию PL / SQL, которая Вы можете запросить
SQL> create type num_tbl is table of number;
2 /
Type created.
SQL> ed
Wrote file afiedt.buf
1 declare
2 l_nums num_tbl := num_tbl( 3, 5, 20, 68, 54 );
3 begin
4 for x in (select * from table(l_nums))
5 loop
6 dbms_output.put_line( x.column_value );
7 end loop;
8* end;
SQL> /
3
5
20
68
54
Если вы выполняете какую-то ручную обработку, вы обычно искали бы данные из другой таблицы, т.е.
SELECT *
FROM some_other_table
WHERE some_key IN (3, 5, 20, 68, 54, 13, 56, 889, 1 );
Если вы действительно пытаетесь сгенерировать набор данных, полный произвольных данных, извлеченных из файла, который вы не хотите использовать Oracle для чтения, вы всегда можете сделать серию SELECT
операторов из DUAL
все UNION ALL
были бы вместе, но это, очевидно, становится довольно громоздким.
WITH sample_data
AS (SELECT 3 num FROM dual UNION ALL
SELECT 5 FROM dual UNION ALL
SELECT 20 FROM dual UNION ALL
SELECT 68 FROM dual UNION ALL
SELECT 54 FROM dual UNION ALL
...
SELECT 1 FROM dual)
SELECT *
FROM sample_data
WHERE num > 5;
Кроме того, используя предложение WITH и строку CSV, мы можем проанализировать строку как таблицу.
Пример:
VARIABLE liste VARCHAR2(100)
EXECUTE :liste := '5, 25, 41, 52';
WITH liste AS (
SELECT SUBSTR(:liste, INSTR(','||:liste||',', ',', 1, rn),
INSTR(','||:liste||',', ',', 1, rn+1) -
INSTR(','||:liste||',', ',', 1, rn)-1) valeur
FROM (
SELECT ROWNUM rn FROM DUAL
CONNECT BY LEVEL<=LENGTH(:liste) - LENGTH(REPLACE(:liste,',',''))+1))
SELECT TRIM(valeur)
FROM liste;