|
Model语句是Oracle 10g的新功能之一。 本文通过一些简单的例子帮助理解Model语句的用法,复杂使用场景请参考其他文章。 环境:当然需要Oracle 10g以上,本人是在11g上测试的。 1. 什么是model语句 select的解析执行顺序
1. from语句 2. where语句 (结合条件) 3. start with语句 4. connect by语句 5. where语句 6. group by语句 7. having语句 8. model语句 9. select语句 10. union、minus、intersect等集合演算演算 11. order by语句 model的好处 Oracle 9i为止,需要使用各种计算分析函数,
2. HelloWorld先看一个简单的例子。 例句1
结果:
说明: model
|
| abcdefghijklmn | 1 |
根据下面语句
model
dimension by (soeji)
measures(ArrValue)
soeji作为索引对数组ArrValue进行操作,rules(ArrValue[1] = 'Hello World')就是说用Hello World覆盖ArrValue[1]里面的值。
在看一个例子,例句2:
select ArrValue,soeji
from (select 'abcdefghijklmn' as ArrValue,
1 as soeji from dual)
model
dimension by(soeji)
measures(ArrValue)
rules(ArrValue[1] = 'Hello World',
ArrValue[2] = 'Hello model');
| Hello World | 1 |
| Hello model | 2 |
rules的缺省行为是存在就更新,不存在则追加,因此,ArrValue[1] = 'Hello World'是更新一条,ArrValue[2] = 'Hello Model'insert一条。
再看一个例子,例句3:
select ArrValue,soeji
from (select 'abcdefghijklmn' as ArrValue,
1 as soeji from dual)
model
dimension by(soeji)
measures(ArrValue)
rules(ArrValue[3] = 'Hello Oracle');
| abcdefghijklmn | 1 |
| Hello Oracle | 3 |
model语句里面,索引可以是不连续的。

再看一个例子,例句4:
select ArrValue,soeji
from (select 'abcdefghijklmn' as ArrValue,
1 as soeji from dual)
model return updated rows
dimension by(soeji)
measures(ArrValue)
rules(ArrValue[4] = 'Hello CodeZine');
| Hello CodeZine | 4 |
使用model return updated rows的话,被rules更新或者插入的行才显示,没有更新过的行不再作为SQL的结果。
| ID | Val |
| 1 | 30 |
| 2 | 100 |
| 3 | 50 |
| 4 | 300 |
select ID,Val from addTotal
model
dimension by(ID)
measures(Val)
rules(
Val[null] = Val[1]+Val[2]+Val[3]+Val[4]);
| ID | Val |
| 1 | 30 |
| 2 | 100 |
| 3 | 50 |
| 4 | 300 |
| null | 480 |
不使用model的话可以使用rollup,union all等实现。
select ID,sum(Val) as Val
from addTotal
group by rollup(ID);
select ID,Val
from addTotal
union all
select null,Sum(Val)
from addTotal;
本文详细介绍了Oracle数据库中的model子句,这是一种高级的SQL查询工具,用于进行复杂的矩阵运算和模拟迭代过程。通过model子句,可以解决常规SQL难以处理的二维或多维数据操作问题,比如财务预测、预算编制等。文章深入浅出地讲解了model子句的基本语法、工作原理及实例应用。

被折叠的 条评论
为什么被折叠?



