因为dept表里面没有deptno=70的数据,所以此时返回的是什么都没有
而不是null,怎样修改语句才能使deptno=70的dname有值,如值为1
------解决思路----------------------
select nvl(max(DNAME),'1') from DEPT t where t.DEPTNO=70
------解决思路----------------------
楼上正解,换种写法开拓下思路
select DNAME from DEPT t where t.DEPTNO=70
union all
select '1' from dual
where not exists(select 1 from DEPT t where t.DEPTNO=70)
------解决思路----------------------
--楼主假如是在过程中用的话可以用块状编程处理好未找到数据的异常,捕获到异常后赋予其特定值,例如:
DECLARE
v_dname VARCHAR2(100);
BEGIN
SELECT DNAME INTO v_dname FROM DEPT t WHERE t.DEPTNO=70;
EXCEPTION
WHEN no_data_found THEN
v_dname := '未找到数据';
WHEN OTHERS THEN
v_dname := 'ERROR:'
------解决思路----------------------
SQLERRM;
END;
------解决思路----------------------
1楼正解,看楼主的想法是若查找不到数据就将null转化成1之类的,简单方便,二楼的方法不太实用,三楼用块状编程是不是弄复杂了。
另:
nvl(字段,‘x’)字段值等于null就这个函数得到的结果就是'x',一般用于存在空值比较的情况下,比如字段a与字段b都是int型,其中一个等于null另一个为非空值,你使用a<>b是不成立的,使用此条件查询你将丢失这条本来不相等的数据,可以如此用法nvl(字段,-1)<>nvl(字段,-1),这样就可以得到想要查询的数据,当然查询数据的前提是此字段值不能有-1值才能用这种写法