SQL中的聚合函数用法

时间:2012-11-20 01:20:00

标签: oracle plsql

我在工作中遇到了以下情况。 请考虑以下块:

Begin
Select Max(Column) from Table where some condition;
Exception
When No_Data_Found then
log into an audit table
End;

当实际上没有找到行时,执行控制不会转移到异常块中,而是返回NULL。 当尝试在没有MAX函数的情况下执行时,执行控制将被捕获到异常块中。

有人可以解释一下这种行为吗?

2 个答案:

答案 0 :(得分:2)

MAX是一个聚合函数。聚合函数对一组值执行计算并返回单个值。它们总是为每个组返回一个值(如果没有GROUP BY子句,则只有一个组)。

因此,在您的代码中,您将永远不会拥有NO_DATA_FOUND,因为MAX将始终返回一个值 - 可以为null。如果你取出MAX,它是一个常规选择,这可能导致没有选择行,从而进入NO_DATA_FOUND块。

答案 1 :(得分:0)

纯聚合函数 - 没有相应的分组列 - 总是只返回一行。

SQL> desc emp
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 EMPNO                                                 NOT NULL NUMBER(4)
 ENAME                                                          VARCHAR2(10)
 JOB                                                            VARCHAR2(9)
 MGR                                                            NUMBER(4)
 HIREDATE                                                       DATE
 SAL                                                            NUMBER(7,2)
 COMM                                                           NUMBER(7,2)
 DEPTNO                                                         NUMBER(2)

SQL> SET NULL [NULL]
SQL> SELECT MAX(sal) FROM emp WHERE 1 = 0;

  MAX(SAL)
----------
[NULL]

SQL>