`
werwolf
  • 浏览: 90834 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle的model用法简介

阅读更多

Model语句是Oracle 10g的新功能之一。 本文通过一些简单的例子帮助理解Model语句的用法,复杂使用场景请参考其他文章。

环境:当然需要Oracle 10g以上,本人是在11g上测试的。

1. 什么是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典型使用场景

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

2. HelloWorld

 先看一个简单的例子。

例句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');
结果:
ArrValue soeji
Hello World 1

说明:

model model语句的关键字,必须

dimension by dimension维度的意思,可以理解为数组的索引,必须

measures 指定作为数组的列

rules 对数组进行各种操作的描述。

例句1的理解:

 select 'abcdefghijklmn' as ArrValue,
1 as soeji from dual;

上面子查询的结果:
ArrValue       soeji
   
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');

执行结果:
ArrValue       soeji
   
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');
结果是:
ArrValue       soeji
   
abcdefghijklmn 1
Hello Oracle 3

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

SQLのイメージ

再看一个例子,例句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');
结果是:
ArrValue       soeji
   
Hello CodeZine 4

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

再来一个,有下表,希望在检索结果后面加一个合计行:
addTotal
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的话可以使用rollupunion all等实现

rollup方式:
select ID,sum(Val) as Val 
  from addTotal 
group by rollup(ID);
union all方式:
select ID,Val 
  from addTotal 
union all 
select null,Sum(Val) 
  from addTotal;
分享到:
评论

相关推荐

    Oracle中使用SQL MODEL定义行间计算.pdf

    Oracle中使用SQL MODEL定义行间计算.pdf

    Oracle SQL高级编程

    2.10 使用物化视图进行查询重写 44 2.11 确定执行计划 46 2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 第4章 SQL是关于集合的 95 第5章 关于问题 116 第6章 SQL...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    oracle常用分析函数与聚合函数的用法

    今天小编就为大家分享一篇关于oracle常用分析函数与聚合函数的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Entity Model Studio V2.0 Beta

    Entity Model Studio是一款支持面向对象设计方法的建模及代码生成工具,集面向对象的静态建模,物理数据库设计,ORM代码自动生成于一体。Entity Model Studio自带了完全自主研发的ORM内核,并与静态模型高度结合,...

    spring3.2+mybatis3.2+oracle数据库 框架代码生成器

    完成以上工作后执行测试类[TpOpTasktransServiceImplTest.java]对应的CRUD方法就可以对表进行增删查改操作了,如果遇到类似于 格式化字符串不匹配的异常时,需要修改一下映射的xml文件使用to_date 或 to_char进行...

    ORACLE DEVELOPER使用指南1

    介绍在数据模型中如何建立和使用分组、公式与汇总列、多重查询以及数据链接。后面各节的特殊类型报表都基于此。要以图形形式查看数据模型,单击 Data Model E

    CodeIgniter分页类pagination使用方法示例

    本文实例讲述了CodeIgniter分页类pagination使用方法。分享给大家供大家参考,具体如下: controller控制器(application/controller/page.php文件): public function index() { $this->load->model ( 'home_...

    解剖PetShop.rar

    2、BLL 引用 IDAL,Model,使用DALFactory创建实例。 3、IDAL 引用 Model。 4、Model 无引用。 5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。 6、SQLServerDAL 引用 ...

    Database Processing Fundamentals, Design, and Implementation (12th Edition).rar

    使用“螺旋方法”进行数据库设计 为数据建模和数据库设计使用了一种通用的信息工程“鸦脚”E-R模型 详细探讨了实际规范技术中的特定范式 使用了最新的DBMS技术:Microsoft Access 2007,Microsoft SQL.Setver 2008...

    metadata:oracle,mysql,sql server 元数据管理表生成

    MetaData元数据管理小工具。作用:可以自动将所有的表信息和字段信息...应该为每一个数据库提供好可覆写的方法。脚本分类提前留好地方。不同的数据库脚本是不同的。可以使用 PowerDesigner 进行统一生成设计。(mac DbW

    We7 CMS内容管理系统软件 v2.8

    4、在ModelList页面上添加设置是否使用旧的列表界面。5、反馈模型-办理权限-增加“不受理”,“转办”的权限,反馈页面根据权限 呈现不同的按钮。6、We7.Model.UI下添加可取得当前文章ID的控件。7、改写OnLoad为...

    We7 CMS v2.8.2 正式版 源码包

    4、在ModelList页面上添加设置是否使用旧的列表界面。5、反馈模型-办理权限-增加“不受理”,“转办”的权限,反馈页面根据权限 呈现不同的按钮。6、We7.Model.UI下添加可取得当前文章ID的控件。7、改写OnLoad为...

    We7 CMS v2.8.2 正式版 64位安装包

    4、在ModelList页面上添加设置是否使用旧的列表界面。5、反馈模型-办理权限-增加“不受理”,“转办”的权限,反馈页面根据权限 呈现不同的按钮。6、We7.Model.UI下添加可取得当前文章ID的控件。7、改写OnLoad为...

    C#用户和IC卡管理系统源码

    THS.DALFactory:工厂接口层,定义了数据库访问的接口,DUF.DALSQLServer层实现了工厂接口层的所有方法,若使用其他数据库(如Oracle),则需要参考DUF.DALSQLServer层再编写DUF.DALOracle层。本层主要用到了反射技术...

    疯狂JAVA讲义

    4.4.3 使用return结束方法 87 4.5 数组类型 87 4.5.1 理解数组:数组也是一种类型 88 学生提问:int[]是一种类型吗?怎么使用这种类型呢? 88 4.5.2 定义数组 88 4.5.3 数组的初始化 89 学生提问:能不能只...

    Toad 使用快速入门

    1. Schema browser的用法简介 2. SQL Editor的使用介绍 3. Procedure Editor的用法介绍 4. 如何进行PLSQL的debug 5. 如何使用SQLab Xpert优化SQL 6. 如何使用SQL Modeler来编写查询 7. 如何使用Toad的DBA方面...

    PhP框架DoitPHP v1.5 MySql版.zip

    可使用统一的视图类方法进行视图文件的调用。 2、Controller Class (1)、删除template() (2)、删除getViewFile() 3、Model Class (1)、新增 dump(), 方便model文件的数据调试 (2)、新增自定义model...

    PHP框架DoitPHP v1.5 SAE版.zip

    可使用统一的视图类方法进行视图文件的调用。 2、Controller Class (1)、删除template() (2)、删除getViewFile() 3、Model Class (1)、新增 dump(), 方便model文件的数据调试 (2)、新增自定义model...

Global site tag (gtag.js) - Google Analytics