2012-08-02 374 views
4

我得到这个警告NULL列的警告:ORA-24347:在聚合函数

ORA-24347: Warning of a NULL column in an aggregate function 

在生产中使用Oracle的MAX()功能时。我正在使用OCI库连接到Oracle 11.2.0.2版。

但是,在测试服务器上,这个错误不会发生。我对查询进行了硬编码,以便可以将NULL值传递给聚合函数。我仍然无法重现这个问题。

此警告是否与任何Oracle错误有关?任何人都可以提供一些示例查询哪些会引发此警告?

编辑:

Table: EX_TABLE 
Columns: 
ID NOT NULL NUMBER 
SOME_NUMBER NUMBER 
MAX_VAL NUMBER 

查询:

select MAX(DECODE(some_number,1,max_val,NULL)) val1 
    , MAX(DECODE(some_number,2,max_val,NULL)) val2 
    , MAX(DECODE(some_number,3,max_val,NULL)) val3 
    from EX_TABLE 
+0

你可以制作[SSCCE](http://sscce.org/)吗?即一个包含数据的简单表格以及您用来向我们显示的查询。 (不需要C++程序,只需要表格数据和查询。)否则这个问题几乎不可能回答。已更新 – 2012-08-02 05:31:00

+0

。已添加示例。 – 2012-08-02 06:07:21

+1

虽然我怀疑这只是一个错字,但在第二行和第三行中,您会采用“some_numer”的最大值,我怀疑您的意思是“some_number”。 – 2012-08-02 17:47:43

回答

0

你应该和0不是NULL值进行解码;

select MAX(DECODE(some_number,1,max_val,0)) val1, 
     MAX(DECODE(some_numer,2,max_val,0)) val2, 
     MAX(DECODE(some_numer,3,max_val,0)) val3 
    from EX_TABLE 
+0

是的,这将解决问题。但即使传递NULL,警告不会进入测试服务器。我只是想模拟那个警告。 – 2012-08-02 06:39:32

+0

什么版本的oracle? – Samson 2012-08-02 06:43:00

+0

Oracle版本11.2.0.2 – 2012-08-02 06:50:31