and ( :3 = 'I' and I.InventionID = :4
or :5 = 'N' and I.InventionTitle like '%' || rtrim(:6) || '%'
or :7 = 'K' and I.KeyWord like '%' || rtrim(:8) || '%'
or :9 = 'P' and A.InventionAppNum = :10 )
쿼리 where 조건절 일부 입니다.
or 사용으로 filter로 빠지는데 access 조건으로 타도록 수정을 하고 싶습니다.
도움 부탁드립니다.
4 - filter((:3='I' AND "I"."INVENTIONID"=:4 OR :5='N' AND "I"."INVENTIONTITLE" LIKE '%'||RTRIM(:6)||'%' OR :7='K' AND "I"."KEYWORD" LIKE '%'||RTRIM(:8)||'%' OR :9='P' AND "A"."INVENTIONAPPNUM"=:10) AND (:11='R' AND TO_CHAR(INTERNAL_FUNCTION("I"."FINALAPPROVALDTETME"),'yyyymmdd')>=:12 AND TO_CHAR(INTERNAL_FUNCTION("I"."FINALAPPROVALDTETME"),'yyyymmdd')<=:13 OR :14='P' AND TO_CHAR(INTERNAL_FUNCTION("A"."APPDATE"),'yyyymmdd')>=:15 AND TO_CHAR(INTERNAL_FUNCTION("A"."APPDATE"),'yyyymmdd')<=:16))
OR 을 UNION ALL 로 푸는 /*+ use_concat */ 힌트를 적용하시면 되겠지만,
SQL 다른 부분때문에 적용하기 힘들거나, 잘 풀리지 않으면,
명시적으로 UNION ALL 로 쪼개셔도 좋겠습니다.
하지만, 아시다시피 아래 두 조건은 앞쪽 '%' 때문에 인덱스를 이용할 수 없을 것 같습니다.
필요하다면 협의를 통해 앞쪽 '%'는 빼주시는게 좋을 것 같습니다.
or :5 = 'N' and I.InventionTitle like '%' || rtrim(:6) || '%'
or :7 = 'K' and I.KeyWord like '%' || rtrim(:8) || '%'