为什么NVL函数在pl / sql中不兼容?
例如:
select DISTINCT (NVL(b.state_id,'0'))
From branch_detail b
where b.state_name like ('TAMILNADU%')
这是表结构(
branch_detail
=====================
state_id state_name
-------- ---------
1 kerala
1 kerala
2 karnataka
2 karnataka
预期输出:0
答案 0 :(得分:1)
NVL()
函数替换结果集中的NULL。必须有返回的行才能生效。
“如果没有返回任何行,我该如何处理”
您需要生成一行。这可能有点作弊,但它可以做你想做的事情:
SQL> Select distinct (nvl(b.state_id,'0'))
2 from ( select 'tamilnadu' as state_name from dual ) t
3 left outer join branch_detail b
4 on b.state_name = t.state_name
5 /
(NVL(B.STATE_ID,'0'))
---------------------
0
SQL> select distinct (nvl(b.state_id,'0'))
2 from ( select 'kerala' as state_name from dual ) t
3 left outer join branch_detail b
4 on b.state_name = t.state_name
5 /
(NVL(B.STATE_ID,'0'))
---------------------
1
SQL>
内联视图t
为搜索的值伪造一行;左外连接意味着你将获得一行,它在branch_detail
表中没有匹配。
答案 1 :(得分:0)
仅当state_id的值为null时,NVL函数才会返回值0。在您的情况下,我认为上面的查询没有返回任何行。因此,结果不会显示。我认为只有在为查询返回的值为null时才会起作用。