函數是一種有零個或多個參數並且有一個返回值的程序。在SQL中Oracle內建了一系列函數,這些函數都可被稱為SQL或PL/SQL語句,函數主要分為兩大類:單行函數、組函數 。
1、SQL中的單行函數
SQL和PL/SQL中自帶很多類型的函數,有字符、數字、日期、轉換、和混合型等多種函數用於處理單行數據,因此這些都可被統稱為單行函數。這些函數均可用於SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等單行函數。
SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM emp Where UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)
單行函數也可以在其他語句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,認證考試特別注意在SELECT語句中使用這些函數,所以我們的注意力也集中在SELECT語句中。
NULL和單行函數
在如何理解NULL上開始是很困難的,就算是一個很有經驗的人依然對此感到困惑。NULL值表示一個未知數據或者一個空值,算術操作符的任何一個操作數為NULL值,結果均為提個NULL值,這個規則也適合很多函數,只有CONCAT,DECODE,DUMP,NVL,REPLACE在調用了NULL參數時能夠返回非NULL值。在這些中NVL函數時最重要的,因為他能直接處理NULL值,NVL有兩個參數:NVL(x1,x2),x1和x2都是表達式,當x1為null時返回X2,否則返回x1。
下面我們看看emp數據表它包含了薪水、獎金兩項,需要計算總的補償
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2
不是簡單的將薪水和獎金加起來就可以了,如果某一行是null值那麼結果就將是null,比如下面的例子:
update emp set salary=(salary+bonus)*1.1
這個語句中,雇員的工資和獎金都將更新為一個新的值,但是如果沒有獎金,即 salary + null,那麼就會得出錯誤的結論,這個時候就要使用nvl函數來排除null值的影響。
所以正確的語句是:
update emp set salary=(salary+nvl(bonus,0)*1.1
單行字符串函數
單行字符串函數用於操作字符串數據,他們大多數有一個或多個參數,其中絕大多數返回字符串
ASCII()
c1是一字符串,返回c1第一個字母的ASCII碼,他的逆函數是CHR()
SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122
CHR(<i>)[NCHAR_CS]
i是一個數字,函數返回十進制表示的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B
CONCAT(,)
c1,c2均為字符串,函數將c2連接到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1、c2都為null,則返回null。他和操作符||返回的結果相同
select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda