oracle解码函数语法的使用介绍
Oracle解码功能
Oracle的解码功能是Oracle公司的独家功能,这是一个强大的功能。它不是一个SQL标准,但它的性能是非常有用的。目前,其他数据库供应商不能提供解码一样的功能,甚至一些数据库厂商对Oracle的SQL。事实上,这批评是有点不够的。就像一些货车制造商抱怨亨利。福特车是不一样的。
1解码中的if逻辑
在逻辑程序设计中,如果-那么-其他常用于逻辑判断,在解码的语法中,它实际上是一个逻辑过程,其语法如下:
解码(价值,因此,IF1,IF2,2,3,3,。其他的)
值表示任何类型的任何表或计算得到任何结果列。当每个值的测试,如果值为1的解码功能,因此结果是;如果值等于2的解码功能,结果是2;等等。事实上,多如果/那么配对可以得到。如果结果不等于任何配对的给定值,译码结果返回到别的。
重要的是要注意,如果,然后,这里可以是函数或计算表达式。
意义阐释:
解码(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,默认值)
这个函数的含义如下:
如果条件=值1,那么
返回(翻译值1)
elsif条件=价值2
返回(翻译值2)
......
elsif条件= n值,然后
返回(翻译值n)
其他的
返回(默认)
最后如果
2解码的一个简单例子
在Oracle系统中大量的数据字典使用解码的设计思想,如V $ SESSION数据字典视图记录会话的信息。我们从Oracle8i 去参考,当用户登录成功学,有V $ SESSION相应记录,但指挥操作用户只记录命令代码在这一观点(0无操作,2插入…),而不是一个具体的命令关键字。因此,我们需要知道当前用户的名字和他们所做的,用下面的命令来获取详细的结果。
复制代码代码如下所示:
选择SID,串行#,用户名,
解码(命令),
0、没有人,
2、'insert,
3、'select,
6,更新,
7,'Delete',
8、放弃,
其他)指令
从用户名不为null的v会话;
3解码实现表转置
数据库中的表是由列和行组成的。
一个二维表。一般来说,任何数据库中的列数都是有限的,而且行数差别很大。如果表是大的,那么行数可能是几千万行。同一列的不同行可能有不同的值,并且不是预定义的。
示例:住房公积金报告置换实例:
1。各单位在当地办事处开立帐户,登记单位基本情况和职工信息。
2、每个单位每月的工资都交给本单位全体职工的住房公积金。系统记录每个雇员的付款明细,并在每个记录上记录管理办公室的代码。
三.每个月、每个季节、半年和年底都需要把办公室变成一个月的详细报告清单。
办公室:城西区东市
月uff1a
2001.01 xxxx1.xx xxxxx2.xx
2001.02 xxxx3.xx xxxxx4.xx
对.
原始数据顺序是:
2001.01 xxxxx1.xx在城西区
2001.01 xxxxx2.xx东城东区
2001.02 xxxxx3.xx在城西区
2001.02 xxxxx4.xx东城东区
住房公积金系统记录员工的月度pay_lst表结构:
bank_code VARCHAR2(6)不为空,运行线路编码
acc_no VARCHAR2(15)不为空,单位代码(单位账户)
emp_acc_no VARCHAR2(20)不为空,员工帐号
tran_date日期不为空,-移交日期
tran_val数(7,2)不为空,支付
sys_date日期默认系统日期,系统日期
oper_id VARCHAR2(10)-运营商代码
这样的表结构通常很容易根据一行(行)的行计数来计算,但是如果要将管理办公室转换成一列(列),就很难输出:
我们创建一个视图来查询当前pay_lst表。改变办公室的代码为一些具体的业务名称。
复制代码代码如下所示:
创建或修改视图bank_date_lst作为
选择to_char(tran_date,'yyyy。MM),
和(解码(bank_code,'001 ',tran_val,0))城西区,
和(解码(bank_code,'002 ',tran_val,0))南成都,
和(解码(bank_code,'003 ',tran_val,0))成都东区
从pay_lst
集团通过to_char(tran_date,'yyyy。MM);
设置视图后,可以直接查询视图,结果可以显示在列中。