PL SQL單行函式和組函式詳解

2021-04-17 03:26:40 字數 2659 閱讀 1979

函式是一種有零個或多個引數並且有乙個返回值的程式。在

sql中內建了一系列函式,這些函式都可被稱為

sql或

pl/sql語句,函式主要分為兩大類:

單行函式

組函式本文將討論如何利用

單行函式以及使用規則。

sql中的

單行函式

sql和

pl/sql中自帶很多態別的函式,有字元、數字、日期、轉換、和混合型等多種函式用於處理單行資料,因此這些都可被統稱為

單行函式。這些函式均可用於select,where、orderby等子句中,例如下面的例子中就包含了to_char,upper,soundex等

單行函式。

selectename,to_char(hiredate,'day,dd-mon-yyyy')

fromemp

whereupper(ename)like'al%'

orderbysoundex(ename)

單行函式也可以在其他語句中使用,如update的set子句,insert的values子句,delet的where子句,考試特別注意在select語句中使用這些函式,所以我們的注意力也集中在select語句中。

null和

單行函式

在如何理解null上開始是很困難的,就算是乙個很有經驗的人依然對此感到困惑。null值表示乙個未知資料或者乙個空值,算術操作符的任何乙個運算元為null值,結果均為提個null值,這個規則也適合很多函式,只有concat,decode,dump,nvl,re

place在呼叫了null引數時能夠返回非null值。在這些中nvl函式時最重要的,因為他能直接處理null值,nvl有兩個引數:nvl(x1,x2),x1和x2都式表示式,當x1為null時返回x2,否則返回x1。

下面我們看看emp資料表它包含了薪水、獎金兩項,需要計算總的補償

columnnameemp_idsalarybonus

keytypepk

nulls/uniquenn,unn

fktable

datatypenumbernumbernumber

length11.211.2

不是簡單的將薪水和獎金加起來就可以了,如果某一行是null值那麼結果就將是null,比如下面的例子:

updateemp

setsalary=(salary+bonus)*1.1

這個語句中,雇員的工資和獎金都將更新為乙個新的值,但是如果沒有獎金,即salary+null,那麼就會得出錯誤的結論,這個時候就要使用nvl函式來排除null值的影響。

所以正確的語句是:

updateemp

setsalary=(salary+nvl(bonus,0)*1.1

單行字串函式

單行字串函式用於操作字串資料,他們大多數有乙個或多個引數,其中絕大多數返回字串

ascii()

c1是一字串,返回c1第乙個字母的ascii碼,他的逆函式是chr()

selectascii('a')big_a,ascii('z')big_zfromemp

big_abig_z

65122

chr(<i>)[nchar_cs]

i是乙個數字,函式返回十進位制表示的字元

selectchr(65),chr(122),chr(223)fromemp

chr65chr122chr223

azbconcat(,)

c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1、c2都為null,則返回null。他和操作符||返回的結果相同

selectconcat('slobo','svoboda')usernamefromdual

username

slobosyoboda

initcap()

c1為一字串。函式將每個單詞的第乙個字母大寫其它字母小寫返回。單詞由空格,控制字元,標點符號限制。

selectinitcap('veni,vedi,vici')ceasarfromdual

ceasar

veni,vedi,vici

instr(,[,<i>[,]])

c1,c2均為字串,i,j為整數。函式返回c2在c1中第j次出現的位置,搜尋從c1的第i個字元開始。當沒有發現需要的字元時返回0,如果i為負數,那麼搜尋將從右到左進行,但是位置的計算還是從左到右,i和j的預設值為1.

selectinstr('mississippi','i',3,3)fromdual

instr('mississippi','i',3,3)

11selectinstr('mississippi','i',-2,3)fromdual

instr('mississippi','i',3,3)

2instrb(,[,i[,j])

與instr()函式一樣,只是他返回的是位元組,對於單位元組instrb()等於instr()

length()

c1為字串,返回c1的長度,如果c1為null,那麼將返回null值。

selectlength('ipsofacto')ergofromdual

ergo

10lengthb()

與length()一樣,返回位元組。

lower()

返回c的小寫字元,經常出現在where子串中共5頁  1    

PL SQL單行函式和組函式詳解 3

單行轉換函式 單行轉換函式用於操作多資料型別,在資料型別之間進行轉換。chartorwid c 使乙個字串,函式將c轉換為rwid資料型別。select test id from test case where rowid chartorwid aaaa0saacaaaaliaaa convert ...

排序和單行函式

select from emp order by sal desc 工資倒序 select from emp order by sal 預設正序 select from emp order by sal desc,hiredate desc 工資和入職日期倒序 select from emp sel...

oracle單行函式

1.字元函式 upper 全大寫 lower 全小寫 initcap 首字母大寫 length 取長度 substr 擷取字串 replace 替換 2.數值函式 round 四捨五入 trunc 擷取 mod 取餘 3.日期函式 當前日期 sysdate 日期 數字 日期 日期 數字 日期 日期 ...