Sql 如果子查询不提供任何输出{Oracle},如何返回默认值
如果我的子查询不提供任何输出,如何提供默认输出Sql 如果子查询不提供任何输出{Oracle},如何返回默认值,sql,oracle,default,Sql,Oracle,Default,如果我的子查询不提供任何输出,如何提供默认输出 select Id from (select ID, rank() over (partition by salary order by ID) as rw_num from emp ) a where a.rw_num > 10 您可以将异常处理与PL/SQL中的case选项no_data_一起使用: declare v_id emp.id%type; begin selec
select Id
from (select ID,
rank() over (partition by salary order by ID) as rw_num
from emp
) a
where a.rw_num > 10
您可以将异常处理与PL/SQL中的case选项no_data_一起使用:
declare
v_id emp.id%type;
begin
select Id
into v_id
from (select ID, rank() over(partition by salary order by ID) as rw_num
from emp) a
where a.rw_num > 10
exception when no_data_found then v_id := 0;
end;
与所需默认输出的联合可能会有所帮助
原始子查询现在是数据CTE。第一个SELECT行6返回满足rw_num value条件的行。然后,它与另一个选择行10联合,该行使用与之前相同的rw_num条件下的NOT EXISTS
如果存在满足条件的特定行:
SQL> WITH
2 data
3 AS
4 (SELECT ename, RANK () OVER (PARTITION BY deptno ORDER BY sal) rw_num
5 FROM emp)
6 SELECT ename
7 FROM data
8 WHERE rw_num > &&n
9 UNION
10 SELECT 'Nothing has been found'
11 FROM DUAL
12 WHERE NOT EXISTS
13 (SELECT NULL
14 FROM data
15 WHERE rw_num > &&n);
Enter value for n: 4
ENAME
----------------------
ALLEN
BLAKE
如果没有:
SQL> undefine n
SQL> /
Enter value for n: 10
ENAME
----------------------
Nothing has been found
SQL>
谢谢你的评论,有没有一种方法可以在SQL查询中而不是PL/SQL中执行。谢谢!!没有工会我们能做点什么吗?可能是在案件陈述或类似的情况下?不客气。如果查询未返回任何未选择的行,则必须从某处获取默认值。CASE不会有帮助,NVL也不会,因为它不是缺少一个值,而是缺少整行。