成语| 古诗大全| 教学资源| 作文| 扒知识| 扒知识繁体

當前位置:首页 > 趣味生活

存儲過程和函數的區別

Q1:Oracle中存儲過程和函數的區別

定義:
存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶透過指定存儲過程的名字並給出參數(如果該存儲過程
帶有參數)來執行它。
存儲過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程式使用時只要呼叫即可。
在ORACLE 中,若干個有聯系的過程可以組合在一起構成程式包。
優 點:
1. 存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
存儲過程與函數的對比
存儲過程的優缺點
優點:減少網路交互的成本。
缺點:
a、不可移植性,每種資料庫的內部編程語法都不太相同,當你的系統需要兼容多種資料庫時,最好不要用存儲過程。
b、學習成本高,DBA一般都擅長寫存儲過程,但並不是每個程式員都能寫好存儲過程,除非你的團隊有較多的開發人員熟悉寫存儲過程,否則後期系統維護會產生問題。
c、業務邏輯多處存在,采用存儲過程後也就意味著你的系統有一些業務邏輯不是在應用程式里處理,這種架構會增加一些系統維護和調試成本。
d、存儲過程和常用應用程式語言不一樣,它支持的函數及語法有可能不能滿足需求,有些邏輯就只能透過應用程式處理。
e、如果存儲過程中有復雜運算的話,會增加一些資料庫服務端的處理成本,對於集中式資料庫可能會導致系統可擴展性問題。
f、為了提高性能,資料庫會把存儲過程代碼編譯成中間執行代碼(類似於java的class文件),所以更像靜態語言。當存儲過程引用的對像(表、視圖等等)結構改變後,
存儲過程需要重新編譯才能生效,在24*7高並發應用場景,一般都是在線變更結構的,所以在變更的瞬間要同時編譯存儲過程,這可能會導致資料庫瞬間壓力上升引起故障(Oracle資料庫就存在這樣的問題)。

Q2:資料庫存儲過程、函數、觸發器的區別

存儲過程和函數的區別:
1.一般來說,存儲過程實作的功能要復雜一點,而函數的實作的功能針對性比較強。
2.對於存儲過程來說可以返回參數,而函數只能返回值或者表物件。
3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來呼叫,由於函數可以返回一個表物件,因此它可以在查詢語句中位於FROM關鍵字的後面。
4.當存儲過程和函數被執行的時候,SQL Manager會到procedure cache中去取相應的查詢語句,如果在procedure cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。
Procedure cache中保存的是執行計劃 (execution plan) ,當編譯好之後就執行procedure cache中的execution plan,之後SQL SERVER會根據每個execution plan的實際情況來考慮是否要在cache中保存這個plan,評判的標准一個是這個execution plan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。
觸發器、存儲過程和函數三者有何區別:
觸發器是特殊的存儲過程,存儲過程需要程式呼叫,而觸發器會自動執行;
在什麼時候用觸發器?要求系統根據某些操作自動完成相關任務。
什麼時候用存儲過程?
存儲過程就是程式,它是經過語法檢查和編譯的SQL語句,所以執行特別快。
存儲過程和用戶客製化函數具體的區別
先看定義: 存儲過程存儲過程可以使得對資料庫的管理、以及顯示關於資料庫及其用戶信息的工作容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。
存儲過程存儲在資料庫內,可由應用程式透過一個呼叫執行,而且允許用戶聲明變數、有條件執行以及其它強大的編程功能。存儲過程可包含程式流、邏輯以及對資料庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。 可以出於任何使用 SQL 語句的目的來使用存儲過程,它具有以下優點: 可以在單個存儲過程中。

Q3:Oracle 存儲過程和函數的區別

函數有返回值,而過程沒有,
簡單點就是
function test_f (parameter in varchar2) return varchar2;
procdrue test_p (parameter in varchar2);
declare
result varchar2;
begin
result:= test_f; --函數有返回值 必須用變數去裝載
test_p;--過程沒有可直接呼叫.
end;

Q4:oracle函數和存儲過程有什麼區別

oracle中存儲過程和函數的區別如下:
1.存儲過程實作的功能要復雜一點,而函數的實作的功能針對性比較強。
2.對於存儲過程來說可以返回參數,而函數只能返回值或者表物件。
3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來呼叫,由於函數可以返回一個表物件,因此它可以在查詢語句中位於FROM關鍵字的後面。
4.當存儲過程和函數被執行的時候,SQL Manager會到procedure cache中去取相應的查詢語句,如果在procedure cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。

Q5:存儲過程和函數的區別是什麼?

存儲過程需要單獨執行;
函數可以隨處呼叫。
存儲過程是保存起來的可以接受和返回用戶提供的參數的Transact-SQL語句的集合。
可以創建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。
也可以創建在Microsoft®SQLServer™啟動時自動執行的存儲過程。
用戶定義函數,它是返回值的已保存的Transact-SQL例程。用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。
與系統函數一樣,用戶定義函數可以從查詢中喚醒呼叫。也可以像存儲過程一樣,透過EXECUTE語句執行。http://topic.csdn.net/t/20030806/16/2116067.html http://www.cnsdn.com.cn/blog/article.asp?id=2035這個的解釋也很好。

Q6:使用out的存儲過程與函數有什麼區別

1. 返回值的區別,函數有1個返回值,而存儲過程是透過參數返回的,可以有多個或者沒有2.呼叫的區別,函數可以在查詢語句中直接呼叫,而存儲過程必須單獨呼叫.函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的資料操作(比如修改、插入資料庫表或執行某些DDL語句等等)參數的返回情況來看:如果返回多個參數值最好使用存儲過程,如果只有一個返回值的話可以使用函數;從呼叫情況來看:如果在SQL語句(DML或SELECT)中呼叫的話一定是存儲函數或存儲的封裝函數不可以是存儲過程,但呼叫存儲函數的時候還有好多限制以及函數的純度等級的問題.oracle函數和存儲過程最大的區別就在於,函數必須帶上一個return返回值,後面跟的是返回值的類型,而存儲過程可以不帶任何返回值。另外,存儲過程和函數同樣支持in,out,in out這三種類型的參數,對應的是分別指明輸入性的參數、輸出型的參數、輸入輸出型的參數。也就是說如果我們需要返回多個值,除了可以使用存儲過程來實作之外,也可以用函數來實作,方法是你將其中一個用return來返回,其他就指明該資料為out參數就可以了。Oracle中存儲過程和函數都可以返回值,但是函數必須要返回值,並一般只返回一個值,而存儲過程則沒有這個限制。從一般應用上來看,如果不需要返回值或者需要多個返回值,使用存儲過程,如果只用一個返回值,就使用函數,從一般程式員的習慣上來看,這樣更符合思維。

WWW.baZHISHI.※cOM

猜你喜歡

更多