如何在select语句里面对SQL的结果集进行处理?用model函数就够了

【原创】 波波说运维 2019-05-23 00:02:00

概述

Model语句是Oracle 10g的新功能之一。下面主要通过一些简单的例子来帮助大家理解Model语句的用法。

以下基于Oracle11.2.0.4测试。


01

什么是model语句

model语句是Oracle10g的新功能,可以在select语句里面像其他编程语言操作数组一样,对SQL的结果集进行处理。执行顺序是位于Having之后。

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为止,需要使用各种计算分析函数,union all等,以及借助其他开发语言(C#及Java等)进行复杂计算统计合并等。使用Model之后,这些都可以在SQL里面进行了。

model典型使用场景:

合计行追加
行列变换
使用当前行的前后行
RegExp_Replace函数的循环执行

02

HelloWorld

1、例子1:

select ArrValue,soeji from (select 'abcdefghijklmn' as ArrValue, 1 as soeji from dual) 
 model dimension by(soeji) measures(ArrValue) rules(ArrValue[1] = 'Hello World');

结果:

如何在select语句里面对SQL的结果集进行处理?用model函数就够了

 

说明:

model model语句的关键字,必须。
dimension by dimension维度的意思,可以理解为数组的索引,必须。
measures 指定作为数组的列
rules 对数组进行各种操作的描述。

根据下面语句model dimension by (soeji) measures(ArrValue) soeji作为索引对数组ArrValue进行操作,rules(ArrValue[1] = 'Hello World')就是说用Hello World覆盖ArrValue[1]里面的值。

2、例子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');

执行结果:

如何在select语句里面对SQL的结果集进行处理?用model函数就够了

 

rules的缺省行为是存在就更新,不存在则追加,因此,ArrValue[1] = 'Hello World'是更新一条,ArrValue[2] = 'Hello Model'  insert一条。

3、例子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');

model语句里面,索引可以是不连续的。

如何在select语句里面对SQL的结果集进行处理?用model函数就够了

 

4、例子4

select ArrValue,soeji from (select 'abcdefghijklmn' as ArrValue, 1 as soeji from dual) 
 model dimension by(soeji) measures(ArrValue) rules(ArrValue[4] = 'Hello HWB');

如何在select语句里面对SQL的结果集进行处理?用model函数就够了

 

使用model return updated rows的话,被rules更新或者插入的行才显示,没有更新过的行不再作为SQL的结果。


篇幅有限,这里主要简单介绍一下model的用法,大家感兴趣的话建议做一下相关实验深入了解下。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

如何在select语句里面对SQL的结果集进行处理?用model函数就够了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值