複雑なクエリでREGEXP_LIKEを使用すると実行に非常に時間がかかる場合は、代わりのソリューションを提供できますか?WHERE句の複数の値を確認するSQLクエリREGEXP_LIKE Oracle 11g
が1つのクエリから値の一覧を取得し、where句
LV_TRANS_TYPES_IDS VARCHAR2(4000);
SELECT LISTAGG(TRANSACTION_TYPE_ID, '|') WITHIN GROUP(ORDER BY 1)
INTO LV_TRANS_TYPES_IDS
FROM MTL_TRANSACTION_TYPES
WHERE TRANSACTION_TYPE_NAME IN
(SELECT MEANING
FROM FND_LOOKUP_VALUES_VL
WHERE LOOKUP_TYPE = 'LOOKUPNAME');
別のクエリにのみ、これらの値を使用する必要があります - それは2のように複数の値を返します| 38 | 45 | 60
LV_TRANS_TYPES_IDS := '^(' || LV_TRANS_TYPES_IDS || ')$';
- 割り当て^(2 | 38 | 45 | 60)$以下のクエリにこの値を渡す
SELECT COUNT(*)
INTO LN
FROM MTL_TRANSACTION_TYPES
WHERE 1 = 1
AND REGEXP_LIKE(TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS);
最初に実行トン彼はクエリを出力し、2番目、3番目のクエリの入力にそれらの出力を使用します。 (、TABLE1 REGEXP_LIKE(TRANSACTION_TYPE_ID、LV_TRANS_TYPES_IDS)組合からF1、F2、すべての組合すべてを選択し、F1を選択しREGEXP_LIKE(TRANSACTION_TYPE_ID、LV_TRANS_TYPES_IDS)表3からF2)のようなあなたがより速く結果を取得したい場合
最初のクエリが出力を取り、第二、第三のクエリの入力のためのそれらの出力を使用して実行します。 (REGISP_LIKE(TRANSACTION_TYPE_ID、LV_TRANS_TYPES_IDS))が選択されているテーブル3からのf1、f2を選択します(REGEXP_LIKE(TRANSACTION_TYPE_ID、LV_TRANS_TYPES_IDS))。 – Chidam