溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle中有哪些常用的函數(shù)

發(fā)布時間:2021-08-04 15:09:08 來源:億速云 閱讀:88 作者:Leah 欄目:數(shù)據(jù)庫

本篇文章為大家展示了oracle中有哪些常用的函數(shù),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1 DECODE 中的if-then-else邏輯

在邏輯編程中,經(jīng)常用到If – Then –Else 進行邏輯判斷。在DECODE的語法中,實際上就是這樣的邏輯處理過程。它的語法如下:

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

Value 代表某個表的任何類型的任意列或一個通過計算所得的任何結(jié)果。當每個value值被測試,如果value的值為if1,Decode 函數(shù)的結(jié)果是then1;如果value等于if2,Decode函數(shù)結(jié)果是then2;等等。事實上,可以給出多個if/then 配對。如果value結(jié)果不等于給出的任何配對時,Decode 結(jié)果就返回else 。

需要注意的是,這里的if、then及else 都可以是函數(shù)或計算表達式。

含義解釋: 

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è)計的,比如記錄會話信息的V$SESSION數(shù)據(jù)字典視圖就是這樣。我們從《Oracle8i/9i Reference》資料中了解到,當用戶登錄成功后在V$SESSION中就有該用戶的相應記錄,但用戶所進行的命令操作在該視圖中只記錄命令的代碼 (0—沒有任何操作,2—Insert…),而不是具體的命令關(guān)鍵字。因此,我們需要了解當前各個用戶的名字及他們所進行的操作時,要用下面命令才能得到 詳細的結(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實現(xiàn)表的轉(zhuǎn)置

數(shù)據(jù)庫中的表是由列和行構(gòu)成的一個二維表。一般列在任何數(shù)據(jù)庫中都是有限的數(shù)量,而行的變化較大,如果表很大,行的數(shù)量可能大上千萬行。同一列的不同行可能有不同的值,而且不是預先定義的。

例:住房公積金報表置換實例:

1.各個單位在本地經(jīng)辦行進行開戶,開戶就是將單位的基本信息和職工信息的進行登記;

2.每月各個單位的會計到經(jīng)辦行交繳本單位的所有職工的住房公積金,系統(tǒng)記錄有每個職工的交繳明細并在每條記錄上記錄有經(jīng)辦行的代碼;

3.每月、季、半年及年終都要求將經(jīng)辦行 變?yōu)椤傲小苯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)記錄職工的每月交繳名細的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)進行統(tǒng)計是很容易的,但是如果希望將經(jīng)辦行變?yōu)榱?column)這樣的格式來輸出就有困難。如果用DECODE函數(shù)來處理則變得很簡單:

我們創(chuàng)建一個視圖來對目前的pay_lst表進行查詢。將經(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’);

建立視圖后,可直接對該視圖進行查詢就可按照列顯示出結(jié)果

上述內(nèi)容就是oracle中有哪些常用的函數(shù),你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI