NVL()
需要 2 个参数:要测试的表达式和默认值,例如nvl(some_field, 111)
. 您只需要用大括号隔离查询参数并提供第二个参数,如下所示:
select nvl( (select 1 from dual), 34) from dual
在您的变体解析器中,关键字后面需要逗号,SELECT
并且无法解析剩余的字符串。
确切地说,您的声明必须如下所示:
select
a.*,
case when NVL(
( SELECT max(b.field1)
FROM b
where b.field2 = a.tbl_a_PK
),
'TRUE'
) = 'TRUE'
then 'has no data in b'
else 'has data in b' end as b_status
from a
希望这可以帮助 ...
更新
在性能方面最好使用exists
而不是max
:
select
a.*,
case when exists
( SELECT null
FROM b
where b.field2 = a.tbl_a_PK
and
b.field2 is not null
and
rownum = 1
),
then 'has data in b'
else 'has no data in b' end as b_status
from a