为什么在示范条款中的规则的 RHS 中对某些聚合进行了不同的处理?

Jac*_*las 6 oracle oracle-11g-r2

由于我对模型子句的理解有限,我希望以下三个查询返回相同的结果,因为数据中没有空值,并且函数是等效的:

select *
from (select level k, 100 v from dual connect by level<=2)
model return updated rows
dimension by (k)
measures (v, 0 shr)
rules ( shr[any] = v[cv()]/sum(v)[any] );  --plain sum
/*
         K          V        SHR
---------- ---------- ----------
         1        100        0.5 
         2        100        0.5 
*/
select *
from (select level k, 100 v from dual connect by level<=2)
model return updated rows
dimension by (k)
measures (v, 0 shr)
rules ( shr[any] = v[cv()]/nullif(sum(v)[any],0) ); --with nullif
/*
         K          V        SHR
---------- ---------- ----------
         1        100       0.25   <------\___ why?
         2        100       0.25   <------/
*/
select *
from (select level k, 100 v from dual connect by level<=2)
model return updated rows
dimension by (k)
measures (v, 0 shr)
rules ( shr[any] = v[cv()]/decode(sum(v)[any],0,null,sum(v)[any]) );  -- with decode
/*
         K          V        SHR
---------- ---------- ----------
         1        100        0.5 
         2        100        0.5 
*/
Run Code Online (Sandbox Code Playgroud)

我在处理解释这种行为的规则时遗漏了什么?

SQLFiddle在这里

mir*_*173 6

Oracle Database SQL Language Reference 中可以阅读

NULLIF(expr1, expr2) ... NULLIF 函数在逻辑上等同于以下 CASE 表达式: CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

但是 Linux 上的 Oracle 11.2.0.3 给出了以下内容

SQL>选择*
  2 from(选择第 k 级,100 v from dual connect by level<=2)
  3 模型返回更新的行
  4维乘(k)
  5 小节 (v, 0 shr)
  6 条规则( shr[any] = CASE WHEN sum(v)[any] = 0 THEN NULL ELSE sum(v)[any] END);


         KV SHR
---------- ---------- ----------
         1 100 200
         2 100 200

SQL>选择*
  2 from(选择第 k 级,100 v from dual connect by level<=2)
  3 模型返回更新的行
  4维乘(k)
  5 小节 (v, 0 shr)
  6 条规则 ( shr[any] = nullif(sum(v)[any], 0));

         KV SHR
---------- ---------- ----------
         1 100 400
         2 100 400

查询>

因此这是(至少是一个文档:-) 11r2 中的错误

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 中获得相同的结果