如果在複雜查詢中使用REGEXP_LIKE,則執行時間很長,您能否爲此提供備用解決方案。檢查WHERE子句中的多個值SQL查詢REGEXP_LIKE Oracle 11g
從一個查詢中獲取值的列表,並應該只使用這些值到另一個查詢的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);
第一執行噸他查詢獲取輸出並將這些輸出用於第二個,第三個查詢輸入。像(從表1中選擇F1,F2,其中REGEXP_LIKE(TRANSACTION_TYPE_ID,LV_TRANS_TYPES_IDS)UNION ALL UNION ALL選擇F1,從表3,其中REGEXP_LIKE(TRANSACTION_TYPE_ID,LV_TRANS_TYPES_IDS)F2)
第一執行查詢採取的輸出並使用這些輸出,用於第二,第三查詢輸入。 (從table1中選擇f1,f2,其中REGEXP_LIKE(TRANSACTION_TYPE_ID,LV_TRANS_TYPES_IDS)union all union all select f1,from table2 where f2,其中REGEXP_LIKE(TRANSACTION_TYPE_ID,LV_TRANS_TYPES_IDS)) – Chidam