Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL中聚合函数的使用_Oracle_Plsql - Fatal编程技术网

Oracle SQL中聚合函数的使用

Oracle SQL中聚合函数的使用,oracle,plsql,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函数的情况下执行时,异常块会捕获执行控制 有人能解释一下这种行为吗 MAX是一个聚合函数。聚合函数对一组值执行计算并返回单个

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

Begin
Select Max(Column) from Table where some condition;
Exception
When No_Data_Found then
log into an audit table
End;
当实际上没有找到行时,执行控制不会转移到异常块中,而是返回NULL。 当尝试在没有
MAX
函数的情况下执行时,异常块会捕获执行控制


有人能解释一下这种行为吗

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

因此,在您的代码中,您永远不会找不到任何数据,因为MAX将始终返回一个值-可以为null。如果去掉MAX,它是一个常规的select,这可能会导致没有选中任何行,从而进入no_DATA_FOUND块。

纯聚合函数(没有相应的按列分组)始终只返回一行

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>

谢谢你,伙计。这真的很有帮助。但是你能解释一下你提到的关于偏执狂的分组吗?