В Oracle любое ненулевое значение соответствует условию LIKE NULL || '%'
.
. Я думаю, что вы пытаетесь избежать совпадения условий, когда один (или оба) параметр имеют значение null
. Простейшим способом будет явная проверка на ничтожность:
SELECT
FC.COD_FCD,
FC.DSC_FCD,
DS.DSC_DSL ,
FC.COD_EST_GNC,
FC.COD_HBT
FROM SPFS_DT_FACUL FC
INNER JOIN SPFS_DT_DSPLG DS
ON FC.COD_DSL = DS.COD_DSL
WHERE
FC.COD_AB='01'
AND
( #{value1} IS NOT NULL AND FC.COD_FCD LIKE #{value1}||'%' )
OR ( #{value2} IS NOT NULL AND FC.COD_FCD LIKE #{value2}||'%' )
)
Также обратите внимание, что я факторизовал ваши условия от (A and B) or (A and C)
до A and (
B or
C`). Это делает выражение короче и легче для понимания.