Oracle DECODE
Jun 07, 2016 pm 03:50 PMOracle DECODE函數(shù)功能很強(qiáng),下面就為您詳細(xì)介紹Oracle DECODE函數(shù)的用法,希望可以讓您對Oracle DECODE函數(shù)有更多的了解。 Oracle DECODE函數(shù) Oracle DECODE函數(shù)是Oracle公司獨(dú)家提供的功能,它是一個(gè)功能很強(qiáng)的函數(shù)。它雖然不是SQL的標(biāo)準(zhǔn),但對于性能非常
Oracle DECODE函數(shù)功能很強(qiáng),下面就為您詳細(xì)介紹Oracle DECODE函數(shù)的用法,希望可以讓您對Oracle DECODE函數(shù)有更多的了解。
Oracle DECODE函數(shù)
Oracle DECODE函數(shù)是Oracle公司獨(dú)家提供的功能,它是一個(gè)功能很強(qiáng)的函數(shù)。它雖然不是SQL的標(biāo)準(zhǔn),但對于性能非常有用。到目前,其他的數(shù)據(jù)庫供應(yīng)商還不能提供類似DECODE的功能,甚至有的數(shù)據(jù)庫的供應(yīng)商批評Oracle的SQL不標(biāo)準(zhǔn)。實(shí)際上,這種批評有些片面或不夠水平。就象有些馬車制造商抱怨亨利。福特的“馬車”不標(biāo)準(zhǔn)一樣。
1 DECODE 中的if-then-else邏輯
在邏輯編程中,經(jīng)常用到If – Then –Else 進(jìn)行邏輯判斷。在DECODE的語法中,實(shí)際上就是這樣的邏輯處理過程。它的語法如下:
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
Value 代表某個(gè)表的任何類型的任意列或一個(gè)通過計(jì)算所得的任何結(jié)果。當(dāng)每個(gè)value值被測試,如果value的值為if1,Decode 函數(shù)的結(jié)果是then1;如果value等于if2,Decode函數(shù)結(jié)果是then2;等等。事實(shí)上,可以給出多個(gè)if/then 配對。如果value結(jié)果不等于給出的任何配對時(shí),Decode 結(jié)果就返回else 。
需要注意的是,這里的if、then及else 都可以是函數(shù)或計(jì)算表達(dá)式。
含義解釋:
DECODE(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)
該函數(shù)的含義如下:
IF 條件=值1 THEN
RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
......
ELSIF 條件=值n THEN
RETURN(翻譯值n)
ELSE
RETURN(缺省值)
END IF
2 DECODE 的簡單例子
Oracle系統(tǒng)中就有許多數(shù)據(jù)字典是使用decode 思想設(shè)計(jì)的,比如記錄會話信息的V$SESSION數(shù)據(jù)字典視圖就是這樣。我們從《Oracle8i/9i Reference》資料中了解到,當(dāng)用戶登錄成功后在V$SESSION中就有該用戶的相應(yīng)記錄,但用戶所進(jìn)行的命令操作在該視圖中只記錄命令的代碼 (0—沒有任何操作,2—Insert…),而不是具體的命令關(guān)鍵字。因此,我們需要了解當(dāng)前各個(gè)用戶的名字及他們所進(jìn)行的操作時(shí),要用下面命令才能得到 詳細(xì)的結(jié)果:
select sid,serial#,username,
DECODE(command,
0,’None’,
2,’Insert’,
3,’Select’,
6,’Update’,
7,’Delete’,
8,’Drop’,
‘Other’) cmmand
from v$session where username is not null;
3 DECODE實(shí)現(xiàn)表的轉(zhuǎn)置
數(shù)據(jù)庫中的表是由列和行構(gòu)成的一個(gè)二維表。一般列在任何數(shù)據(jù)庫中都是有限的數(shù)量,而行的變化較大,如果表很大,行的數(shù)量可能大上千萬行。同一列的不同行可能有不同的值,而且不是預(yù)先定義的。
例:住房公積金報(bào)表置換實(shí)例:
1.各個(gè)單位在本地經(jīng)辦行進(jìn)行開戶,開戶就是將單位的基本信息和職工信息的進(jìn)行登記;
2.每月各個(gè)單位的會計(jì)到經(jīng)辦行交繳本單位的所有職工的住房公積金,系統(tǒng)記錄有每個(gè)職工的交繳明細(xì)并在每條記錄上記錄有經(jīng)辦行的代碼;
3.每月、季、半年及年終都要求將經(jīng)辦行 變?yōu)椤傲小苯o出個(gè)月的明細(xì)報(bào)表:
經(jīng)辦行:城西區(qū) 城東區(qū)
月份:
2001.01 xxxx1.xx xxxxx2.xx
2001.02 xxxx3.xx xxxxx4.xx
。 。 。 。 。 。
原來的數(shù)據(jù)順序是:
城西區(qū)2001.01 xxxxx1.xx
城東區(qū)2001.01 xxxxx2.xx
城西區(qū)2001.02 xxxxx3.xx
城東區(qū)2001.02 xxxxx4.xx
住房公積金系統(tǒng)記錄職工的每月交繳名細(xì)的pay_lst表結(jié)構(gòu)是:
bank_code varchar2(6)NOT NULL, -- 經(jīng)辦行代碼
acc_no varchar2(15) not null, -- 單位代碼(單位帳號)
emp_acc_no varchar2(20) not null, -- 職工帳號
tran_date date not null, -- 交繳日期
tran_val Number(7,2) not null, -- 交繳額
sys_date date default sysdate, --系統(tǒng)日期
oper_id varchar2(10) --操作員代碼
這樣的表結(jié)構(gòu),一般按照將經(jīng)辦行作為行(row)進(jìn)行統(tǒng)計(jì)是很容易的,但是如果希望將經(jīng)辦行變?yōu)榱?column)這樣的格式來輸出就有困難。如果用DECODE函數(shù)來處理則變得很簡單:
我們創(chuàng)建一個(gè)視圖來對目前的pay_lst表進(jìn)行查詢。將經(jīng)辦行代碼變?yōu)橐恍┚唧w的經(jīng)辦行名稱即可:
CREATE OR REPLACE VIEW bank_date_lst AS
Select to_char(tran_date,’yyyy.mm’),
SUM( DECODE ( bank_code,’001’, tran_val,0 )) 城西區(qū),
SUM( DECODE ( bank_code,’002’, tran_val,0 )) 城南區(qū),
SUM( DECODE ( bank_code,’003’, tran_val,0 )) 城東區(qū)
FROM pay_lst
GROUP BY to_char(tran_date,’yyyy.mm’);
建立視圖后,可直接對該視圖進(jìn)行查詢就可按照列顯示出結(jié)果。
?

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

MySQL? Oracle? ?? ???? ????, ?? ? ?????. 1. ???? : MySQL? ?? ????? GPL ????? ???? Oracle? ?? ????? ?????. 2. ?? : MySQL?? ??? ??? ??? ? ?? ???? ? ?? ??? ?????. Oracle? ??? ??? ??? ??? ??? ??? ? ??? ????? ?????. 3. ?? : MySQL? ?? ?? ???? ??? ?? ???? Oracle? ??? ??? ? ??? ???? ?????.

MySQL? ??? ? ?? ?? ????? GPL ? ?? ????? ?????. Oracle? ???? ??? ??? ??? ????? ?????. MySQL? GPL ????? ???? ??? ????? ??? ?????. Oracle ???? ??? ???? ?? ???? ???? ???? ??? ????? ????.

?? ?? ???? ?????? MongoDB ?? Oracle? ???? ?? ?? ??? ?? ????. 1) ?? ?? ????? ?? ???? ?????? ??? ???? ?? ?? ?? ????? ?? MongoDB? ??????. 2) ??? ??? ???? ??? ??? ??? ?? Oracle? ??????.

????? ?? Java? ??? ?? ??? ????. 1. ?? ??? ??? ??????. 2. ? ??; 3. ??? ?? ? ??? ??? ?????. 4. ??? ????? ??????. 5. ?? ???? ??? ?????. 6. ???? ?????? ??? ??? ?????. 7. ???? ??? ??? ?? ?????. 8. ?? ??? ??? ???? ??????. ??? ??? Java ?????? ????? ????? ? ??? ? ? ????.

JDBC? ???? Oracle Database Connection Pool? ???? ???? ??? ?????. 1) ?? ? ??, 2) ?? ??? ?? ?? ??, 3) SQL ?? ?? ? 4) ???? ????. OracleUcp? ???? ??? ????? ???? ??? ??????.

?? Java? ?? ??, ?? ?? ?????, ?? ??? ??, ?? ??, ?? ???, I/O ????, JDBC, ???? ????? ? ?? ? ??? ?? ?? ??? ?????. 1. ?? ???? ??, ??? ??, ??? ? ?? ?? ?? ?????. 2. ?? ?? ?????? ???, ??, ??, ???, ??? ? ???? ????. 3. ??? ??? ???? ArrayList, LinkedList, Hashset ? Hashmap? ?????. 4. ?? ??? Try-Catch ??? ?? ???? ???? ?????. 5. ?? ??? ?????? ??? ???? ? ???? ???????. 6. I/O ???? ??? ??, ?? ? ?? ??? ?????. 7. JDBC? ??????? ?? ???? ? ?????. 8. ???? ????? ?? s

??? ???? ?? Oracle ??????? Tableau? ????? ?? ??? ??????. 1. Tableau?? Oracle ?????? ?? ?? ODBC ?? JDBC ???? ??; 2. ???? ???? ?? ?? ?? ?? ???? ????. 3. ??? ????? ?? SQL ?? ? ???? ??????. 4. Oracle? ??? ??? ?? ? ??? ???? ??? ?? SQL ??? ?? ??????. 5. ?? ??? ????? ?? ??? ? ?? ?????. 6. ?? ??? ?? ?? ??? ?? Tableau? ??? ??? ??????.

?? ?? ??? ?? ???? ??? ?????? ???? ???? ?? ?? ????? ?????. ??? ?? ??? ?? ? ????. MongoDB? ?? ?? ?? ?????? ?? Oracle? ?? ??? ??????? ???????? ?? ?? Mongodb? Oracle? ???? ??? ??? ?? ?? ???? ???? ?? ?????? ???? ???? ??? ????? ?? ? ????. ? ????? ?? ???? ?? ??? ? ?? ??? ??????? ?? ??, ?? ???? ? ?? ??? ????? ??????. ??? ??? ????? ?? ? ?????? ?????? ??? ?? ? ?????? MongoDB ?? ORA? ???? ???? ??? ???????.
