Если вы привыкли программировать на PL / SQL, вы, возможно, видели, что в PL / SQL есть тип BOOLEAN.Однако это не так в самой базе данных Oracle.Обычно я работаю над этим, используя символьные выражения, которые возвращают 'Y' или 'N' вместо TRUE
или FALSE
.
Помня об этом - если вы действительно хотите использовать CASEВыражение, аналогичное тому, которое вы использовали изначально, вы можете использовать следующее:
AND CASE
WHEN SUBSTR(upper(p_open_invoice),1,1) = 'Y'
THEN CASE
WHEN NVL(P.AMOUNT_DUE_REMAINING,0) = 0 THEN 'Y'
ELSE 'N'
END
ELSE 'Y'
END = 'Y'
Здесь выражение CASE возвращает либо «Y», либо «N», которое затем сравнивается с «Y».