`
werwolf
  • 浏览: 93252 次
  • 性别: 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定义行间计算 #### 概述 在Oracle数据库10g中,`MODEL`子句提供了一种强大而灵活的方法来执行行间计算,它允许用户根据查询结果定义多维数组,并将规则应用于这些数组以计算新值。与传统...

    Oracle communications data model

    该数据模型涉及几个关键点,首先是“速度至价值”(Speed to Value),意味着通过使用Oracle Communications Data Model,企业可以快速建立起数据仓库系统,从而快速获得通信和市场洞察。这种快速的实施方式,伴随着...

    oracle函数用法

    ### Oracle函数用法详解 #### 数学函数 Oracle数据库提供了丰富的数学函数,这些函数可以帮助我们进行数据处理和分析。...对于每个函数的具体使用方法和注意事项,建议查阅Oracle官方文档获取更详细的帮助和指导。

    Oracle Communications Data Model Installation Guide 11.3.2

    在《Oracle Communications Data Model Installation Guide 11.3.2》中,主要涵盖了该版本的安装、配置以及使用指导。以下是该指南可能涉及的一些关键知识点: 1. **系统需求**:在开始安装前,你需要了解支持的...

    C#自动生成Model工具源码

    本文将深入探讨“C#自动生成Model工具源码”这一主题,包括其工作原理、如何使用和其在软件开发中的价值。 首先,我们需要理解什么是“Model”。在软件开发中,特别是使用MVC(Model-View-Controller)架构时,...

    Oracle Communications Data Model Reference Release 11.3.2-936

    Oracle Communications Data Model Reference Release 11.3.2-936 是一份详细的技术文档,主要针对使用Oracle通信数据模型的开发者和系统管理员。这个版本是Oracle公司在2013年发布的一个更新,由Thomas Van Raalte...

    Oracle多行记录合并

    使用`MODEL`指令需要对Oracle SQL有深入理解,但能解决一些其他方法无法处理的复杂问题。 在实际应用中,选择哪种方法取决于具体的需求、数据结构以及Oracle数据库的版本。例如,如果只需要简单的字符串连接,`...

    .net Model 生成器源码

    例如,你可以定制Model类的属性命名规则、DAL接口的方法签名,甚至BLL层的业务逻辑实现方式。从数据库生成Model,DAL,BLL的过程,通常是通过读取数据库的架构信息(如表结构和字段),然后根据这些信息自动生成对应...

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.5 Evaluation Order

    熟练掌握Model子句的评估顺序和用法,对于提高Oracle SQL编程能力,尤其是处理复杂数据计算场景,具有重要意义。 通过阅读9.5节的内容并结合示例脚本进行实践,读者可以深入理解Model子句的精髓,并将这些知识应用...

    SSH Oracle 工具书

    《SSH Oracle工具书》主要涵盖了两个关键领域:...通过学习《SSH Oracle工具书》中的内容,开发者不仅可以掌握SSH框架的高级用法,还能深入了解Oracle数据库的管理和使用,从而提升在Java企业级应用开发中的专业技能。

    oracle spatial 用户指南

    尽管这个用户指南是英文版,但对于深入理解Oracle Spatial的功能和使用方法来说,仍然是非常宝贵的资源。通过仔细阅读和实践,即使对于非英语母语者,也能逐步掌握这个强大的地理空间数据库管理系统。

    Oracle数据库表生成C#实体类

    Oracle数据库是世界上最流行的数据库管理系统之一,它被广泛用于企业级数据存储和管理。在开发基于.NET框架的应用程序,特别是使用C#语言时,通常需要将数据库中的表结构映射到C#对象,这些对象被称为实体类。这有助...

    Oracle Essbase New Features and Roadmap Update

    7. 文档还提到了“Common Enterprise Information Model”(通用企业信息模型),这可能是指在Oracle产品和解决方案中实现数据模型和信息共享的一种方法。 通过这些知识点,我们可以了解到Oracle Essbase在当时...

    ORACLE sql 星期几 一个月的第几天等 方法

    Oracle SQL 提供了多种方式来获取星期几,下面是一些常见的方法: 1. 使用 TO_CHAR 函数 可以使用 TO_CHAR 函数将日期格式化为字符串,然后使用 DY format model 来获取星期几。例如: ```sql SELECT TO_CHAR...

    oracle行列转换总结

    本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`collections`),并提供具体的示例来帮助理解。 ### 1. 使用`UNION ALL`进行行列转换 `UNION ALL`是一种简单直接的...

    《Pro Oracle SQL》CHAPTER 9 -- 9.10Performance Tuning with the Model Clause

    《Pro Oracle SQL》一书的第9章,重点关注了使用"Model"子句进行性能调优的方法。在Oracle数据库中,Model子句是一种强大的功能,它允许数据建模和复杂的计算,尤其适用于解决多步骤计算问题,如模拟、预测和序列...

    oracleSpatial java Api lib

    - `sdonm.jar`:可能包含了 Oracle Spatial 的网络模型(Network Model)相关的类和方法,用于处理地理网络数据,如道路网络、管道系统等。 - `sdotopo.jar`:可能涉及到拓扑操作,比如检查和修复地理对象的拓扑关系...

    JAVAweb连接oracle数据库工程

    1. **Model**:模型层负责处理业务逻辑和数据操作,这里将包含用于连接Oracle数据库的Java类,如`ReadOrcl`,它可能包含JDBC连接池管理、SQL语句执行等方法。 2. **DAO**:数据访问对象层是模型层的一部分,负责与...

    Entity Framework for Oracle

    - **实体模型(EDMX或Code First)**:可以选择使用Entity Data Model(EDMX)工具生成模型,或者采用Code First方法从零开始编写模型类。 - **数据库迁移**:EF提供了一个强大的数据库迁移功能,允许在不丢失数据...

Global site tag (gtag.js) - Google Analytics