その数字のセットを文字列として渡し、個々の数字に分割したいと思います。 Oracleには組み込みのトークナイザーが付属していないため、これは想像以上に困難です。変だね?
DasInterwabsをノックアウトするPL/SQLトークナイザーソリューションは多数あります。私は、正規表現を使用するAnup Paniの実装のバリアントを使用しています(したがって、Oracle 10g以降のみ)。私のバリアントは、SQL型として宣言した数値の配列を返します:
SQL> create or replace type numbers as table of number
2 /
Type created.
SQL>
これは、SELECTステートメントのTABLE()関数への入力として使用できることを意味します。
SQL> select * from table (str_to_number_tokens('20000, 240004, 375000, 255000'))
2 /
COLUMN_VALUE
------------
20000
240004
375000
255000
SQL>
これは、次のように、数値の文字列をクエリで結合できるテーブルに変換できることを意味します。
SQL> select val
2 from t23
3 , ( select column_value as i_no
4 from table (str_to_number_tokens('20000, 240004, 375000, 255000')) ) sq
5 where t23.year = 2010
6 and sq.i_no between t23.r_min and t23.r_max
7 order by t23.priority
8 /
VAL
----------
82
50
52
SQL>