- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RALE数据库开发基础第八章高级用法.doc
ORACLE数据库管理员基础
第八章一些髙级的用法
这里给出一点不作为一般耍求的内容,它虽然不足必需的,但对子应川开发來说很重耍。希
單Oracle应用设计者把它应用到系统的设计屮。
8. 1 关于 DECODE
DECODE是Oracle公司 提供的功能,它是一个功能很强的函数它里然不是SQL
的标准,但对于性能非常有用。到M前,其他的数据库供应商还不能提供类似DECODE的
功能,其至有的数据库的供应商批评Oracle的SQL不标准。实际上,这种批评冇些片胆或
不够水平。就象有些7Y午制造商抱怨亨利。福特的“Hr午不标准一样。
8. 1. 1 DECODE 中的 if-then-else 逻辑
在逻辑编程中,经常用到Tf - Then -Else进行逻辑判断。在DECODE的语法中,实际上
就是这样的逻辑处理过程。它的语法如h
DECODE (value, if 1, thcnl, if2, thcn2, if3, thon3, . . . else )
Value代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测
试,如果value的值为ifl,Decode函数的结果是thenl;如果value等于if2, Decode函数结
果是then2;等等。事实上,可以给出多个if/then配对如果value结果不等于给出的任何配
对吋,Decode结果就返回else。
需耍注意的足,这里的if、then及else都可以足函数或计算表达式。
8. 1.2 DECODE的简单例子
Oracle系统中就冇许多数据字典足使川decode思想设计的,比如记录会话信息的
V$SESSION数据字典视图就是这样。我们从《OracleSi Reference))资料中了解到,当用户登
录成功后在V$SESSTON中就有该用户的相应记录,但用户所进行的命令操作在该视图中只
记录命令的代码(0—没宥任何操作,2—Insorv),而不是具体的命令关键字。因此,我们 滿要/解当前各个用户的名字及他们所进行的操作时,要用卜面命令才能得到详细的结果: select sid,serial#, username,
DECODE(command,
0, ’ None
Insert’,
181
SelectT ,
Update* ,
Delete’ ,
Drop’ ,
OtherJ ) cmmand
from v$session where username is not null;
8. 1.3 DECODE实现表的转置
数据库中的表足由列和行构成的一个二维表。一般列在任何数据库中都足冇限的数量,而行
的变化较大,如果表很大,行的数最讨能大上千万行。同一列的不同行讨能冇不同的值,而
且不是预先定义的。
除上面描述表具有的一些特点外,有一些表可以看成是不变的或奍是较稳定的,比如住房公
积金系统是各个单位按照职工的工资数的比例交到木地的经办行中,它的处理流程如下:
例1.住房公积金报表置换实例:
各个单位在本地经办行进行开户,开户就是将单位的S本信总和职工信总的进行登记;
每月各个单位的会计到经办行交缴木单位的所冇职工的住房公积金,系统记录冇每个职工
的交缴明细并在每条记录上记录有经办行的代码;
每月、季、半年及年终都耍求将经办行变为“列”给出个月的明细报表:
经办行:城西区城东区
月份:
2001.01 xxxxl. xx xxxxx2. xx
2001.02 xxxx3.xx xxxxx4.xx
原来的数据顺序是:
城西区 2001. 01 xxxxxl.xx
城东区 2001. 01 xxxxx2. xx
城丙区 2001.02 xxxxx3. xx
城东区 2001. 02 xxxxxd. xx
住房公积金系统记录职工的每月交缴名细的pay_lst表结构是:
bank code varchar2 (6) NOT NULL,—经办行代码
acc no varchar2(15) not null,—单位代K(甲位帐号)
emp_acc_no varchar2(20) not null,—职工帐号
translate date not null,—交缴闩期
tran一val Number (7, 2) not null,—交缴额
sys_date date default sysdate,—系统円期
182
oper_id varchar2(10)—操作员代码
这样的表结构,一般按照将经办行作为行进行统计是很容易的,但是如果希樂将经办行变为
列这样的格式来输出就有困难。如果用DECODE函数来处理则变得很简单:
我们创建一个视图來对目前的pay_lst表进行奔询。将经办行代码变为一些其体的经办行名
称即可:
CREATE OR R
原创力文档


文档评论(0)