函數和存儲過程的區別

函數和存儲過程的區別

從參數的返回情況來看:
    如果返回多個參數值最好使用存儲過程,如果只有一個返回值的話可以使用函數;
從調用情況來看:
    如果在SQL語句(DML或SELECT)中調用的話一定是存儲函數或存儲的封裝函數不可以是存儲過程,但調用存儲函數的時候還有好多限制以及函數的純度等級的問題,你可以參考《ORACLE9I PLSQL程序設計》(機械工業出版社);

如果是在過程化語句中調用的話,就要看你要實現什麼樣的功能。函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比如修改、插入數據庫表或執行某些DDL語句等等),所以雖然他們的語法上很相似但用戶在使用他們的時候所需要完成的功能大部分情況下是不同的。

========================================================

存儲過程和函數:

Oracle函數和存儲過程的區別 - qindingsky - 寧靜以致遠

   例子:

   //創建過程

    createor replace procedure add_emailinfo(namee email_info.fullname%type,address email_info.email_address%type )

   is

   begin

    insertinto email_info(fullname,email_address) values(namee,address);

   end;

   //調用過程

    calladd_emailinfo('cherry','asdfsdf');

   /////////////////////////////////////////////////////////////////////////////////////

   //創建函數

    createor replace function sel_emailinfo(namee email_info.fullname%type)

    returnvarchar2 is

    addressvarchar2(30);

   begin

    selectemail_address into address from email_info

    wheretrim(fullname)=trim(namee);

    returnaddress;

    end;

   //調用函數

    selectsel_emailinfo('bbb') from dual;

----------------------------

字符函數——返回字符值

這些函數全都接收的是字符族類型的參數(CHR除外)並且返回字符值.

除了特別說明的之外,這些函數大部分返回VARCHAR2類型的數值.

字符函數的返回類型所受的限制和基本數據庫類型所受的限制是相同的。

字符型變量存儲的最大值:

VARCHAR2數值被限制爲2000字符(ORACLE8中爲4000字符)

CHAR數值被限制爲255字符(在ORACLE8中是2000)

long類型爲2GB

Clob類型爲4GB

1、CHR

語法: chr(x)

功能:返回在數據庫字符集中與X擁有等價數值的字符。CHR和ASCII是一對反函數。經過CHR轉換後的字符再經過ASCII轉換又得到了原來的字

符。

使用位置:過程性語句和SQL語句。


2、CONCAT

語法:CONCAT(string1,string2)

功能:返回string1,並且在後面連接string2。

使用位置:過程性語句和SQL語句。


3、INITCAP

語法:INITCAP(string)

功能:返回字符串的每個單詞的第一個字母大寫而單詞中的其他字母小寫的string。單詞是用.空格或給字母數字字符進行分隔。不是字母的

字符不變動。

使用位置:過程性語句和SQL語句。


4、LTRIM

語法:LTRIM(string1,string2)

功能:返回刪除從左邊算起出現在string2中的字符的string1。String2被缺省設置爲單個的空格。數據庫將掃描string1,從最左邊開始。當

遇到不在string2中的第一個字符,結果就被返回了。LTRIM的行爲方式與RTRIM很相似。

使用位置:過程性語句和SQL語句。

5、NLS_INITCAP

語法:NLS_INITCAP(string[,nlsparams])

功能:返回字符串每個單詞第一個字母大寫而單詞中的其他字母小寫的string,nlsparams

指定了不同於該會話缺省值的不同排序序列。如果不指定參數,則功能和INITCAP相同。Nlsparams可以使用的形式是:

‘NLS_SORT=sort’

這裏sort制訂了一個語言排序序列。

使用位置:過程性語句和SQL語句。

6、NLS_LOWER

語法:NLS_LOWER(string[,nlsparams])

功能:返回字符串中的所有字母都是小寫形式的string。不是字母的字符不變。

     Nlsparams參數的形式與用途和NLS_INITCAP中的nlsparams參數是相同的。如果nlsparams沒有被包含,那麼NLS_LOWER所作的處理和

LOWER相同。

使用位置;過程性語句和SQL語句。

7、NLS_UPPER

語法:nls_upper(string[,nlsparams])

功能:返回字符串中的所有字母都是大寫的形式的string。不是字母的字符不變。nlsparams參數的形式與用途和NLS_INITCAP中的相同。如果

沒有設定參數,則NLS_UPPER功能和UPPER相同。

使用位置:過程性語句和SQL語句。

8、REPLACE

語法:REPLACE(string,search_str[,replace_str])

功能:把string中的所有的子字符串search_str用可選的replace_str替換,如果沒有指定replace_str,所有的string中的子字符串

search_str都將被刪除。REPLACE是TRANSLATE所提供的功能的一個子集。

使用位置:過程性語句和SQL語句。

9、RPAD

語法:RPAD(string1,x[,string2])

功能:返回在X字符長度的位置上插入一個string2中的字符的string1。如果string2的長度要比X字符少,就按照需要進行復制。如果string2

多於X字符,則僅string1前面的X各字符被使用。如果沒有指定string2,那麼使用空格進行填充。X是使用顯示長度可以比字符串的實際長度

要長。RPAD的行爲方式與LPAD很相似,除了它是在右邊而不是在左邊進行填充。

使用位置:過程性語句和SQL語句。

10、RTRIM
語法: RTRIM(string1,[,string2])

功能:返回刪除從右邊算起出現在string1中出現的字符string2.string2被缺省設置爲單個的空格.數據庫將掃描string1,從右邊開始.當遇

到不在string2中的第一個字符,結果就被返回了RTRIM的行爲方式與LTRIM很相似.

使用位置:過程性語句和SQL語句。

11、SOUNDEX

語法: SOUNDEX(string)

功能:返回string的聲音表示形式.這對於比較兩個拼寫不同但是發音類似的單詞而言很有幫助.

使用位置:過程性語句和SQL語句。

12、SUBSTR

語法:SUBSTR(string,a[,b])

功能:返回從字母爲值a開始b個字符長的string的一個子字符串.如果a是0,那麼它就被認爲從第一個字符開始.如果是正數,返回字符是從左

邊向右邊進行計算的.如果b是負數,那麼返回的字符是從string的末尾開始從右向左進行計算的.如果b不存在,那麼它將缺省的設置爲整個字符

串.如果b小於1,那麼將返回NULL.如果a或b使用了浮點數,那麼該數值將在處理進行以前首先被卻爲一個整數.

使用位置:過程性語句和SQL語句。

13、TRANSLATE

   語法:TRANSLATE(string,from_str,to_str)

   功能:返回將所出現的from_str中的每個字符替換爲to_str中的相應字符以後的string.TRANSLATE是REPLACE所提供的功能的一個超集.

如果from_str比to_str長,那麼在from_str中而不在to_str中而外的字符將從string中被刪除,因爲它們沒有相應的替換字符.to_str不能爲空

.Oracle把空字符串認爲是NULL,並且如果TRANSLATE中的任何參數爲NULL,那麼結果也是NULL.

使用位置:過程性語句和SQL語句。


14、UPPER

語法: UPPER(string)

功能:返回大寫的string.不是字母的字符不變.如果string是CHAR數據類型的,那麼結果也是CHAR類型的.如果string是VARCHAR2類型的,那麼

結果也是VARCHAR2類型的.

使用位置: 過程性語句和SQL語句。


字符函數——返回數字

這些函數接受字符參數回數字結果.參數可以是CHAR或者是VARCHAR2類型的.儘管實際下許多結果都是整數值,但是返回結果都是簡單的NUMBER

類型的,沒有定義任何的精度或刻度範圍.

16、ASCII

語法: ASCII(string)

功能:數據庫字符集返回string的第一個字節的十進制表示.請注意該函數仍然稱作爲ASCII.儘管許多字符集不是7位ASCII.CHR和ASCII是互爲

相反的函數.CHR得到給定字符編碼的響應字符.ASCII得到給定字符的字符編碼.

使用位置: 過程性語句和SQL語句。

17、INSTR

語法: INSTR(string1,string2[a,b])

功能: 得到在string1中包含string2的位置.string1時從左邊開始檢查的,開始的位置爲a,如果a是一個負數,那麼string1是從右邊開始進行

掃描的.第b次出現的位置將被返回.a和b都缺省設置爲1,這將會返回在string1中第一次出現string2的位置.如果string2在a和b的規定下沒有

找到,那麼返回0.位置的計算是相對於string1的開始位置的,不管a和b的取值是多少.

使用位置: 過程性語句和SQL語句。

18、INSTRB

語法: INSTRB(string1,string2[a,[b]])

功能:和INSTR相同,只是操作的對參數字符使用的位置的是字節.

使用位置: 過程性語句和SQL語句。

19、LENGTH

語法: LENGTH(string)

功能:返回string的字節單位的長度.CHAR數值是填充空格類型的,如果string由數據類型CHAR,它的結尾的空格都被計算到字符串長度中間.

如果string是NULL,返回結果是NULL,而不是0.

使用位置: 過程性語句和SQL語句。

20、LENGTHB

語法: LENGTHB(string)

功能:返回以字節爲單位的string的長度.對於單字節字符集LENGTHB和LENGTH是一樣的.

使用位置: 過程性語句和SQL語句。

21、NLSSORT

語法:NLSSORT(string[,nlsparams])

功能:得到用於排序string的字符串字節.所有的數值都被轉換爲字節字符串,這樣在不同數據庫之間就保持了一致性.Nlsparams的作用和

NLS_INITCAP中的相同.如果忽略參數,會話使用缺省排序.

使用位置: 過程性語句和SQL語句。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章