O problema é que o Oracle (por padrão) trata strings vazias como
NULL
. Por isso:where name = ''
é o mesmo que:
where name = NULL
e ambos sempre falham (porque eles retornam
NULL
). Você pode corrigir isso de várias maneiras. Um método é:
where (name = INPUT or name is null and INPUT is null)
Ou, se você souber que há um nome inválido:
where coalesce(name, '<invalid>') = coalesce(INPUT, '<invalid>')