當前位置:首頁 » 存儲配置 » oracle存儲過程和函數

oracle存儲過程和函數

發布時間: 2022-06-28 02:35:57

㈠ oracle中的存儲過程與函數

函數是有返回值的,存儲過程沒有。
在BODY中的話,一般函數都是SELECT語句,而存儲過程是包括DML語句的。

㈡ Oracle 存儲過程和函數的區別

Oracle中函數和存儲過程僅體現在一個地方:


  1. 函數有返回值,而存儲過程沒有返回值(當然,兩者都可以通過定義out參數來實現返回值)


其實,Oracle函數和存儲過程差別很小,對比其他資料庫,比如sqlServer:

  1. sqlserver中,函數是不能存在非select的dml語句的,換句話說,函數中,sqlserver是不能出現update、delete、insert等語句的

  2. 而Oracle中,是十分自由和寬容的,update、delete、insert等語句都可以出現

  3. 但因為Oracle的自由度,會引起其它一些問題:如果使用C#來調用Oracle的函數時,會出現因函數含有update等語句而無法調用,只能換成存儲過程或者在函數外再加一層存儲過程來實現調用。

㈢ Oracle函數 和 Oracle存儲過程的區別

函數和存儲過程的區別

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

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

㈣ oracle存儲過程和函數的區別

過程:函數和存儲過程的統稱。

函數:有且僅有一個返回值,可以用於SQL語句中。 如:x := get_X(),select get_X() from al,返回值為函數調用的結果。

存儲過程:無返回值。要返回結果,必須聲明為out參數。
如:sp_x(x,y,z),x和y為in類型參數,z為out/in out類型參數。

在oracle中,封裝工具還有自定義類型、包等。包可以封裝過程和函數,包頭類似java中的介面,包體類似JAVA中實現介面的類。

㈤ oracle中函數和存儲過程的區別和聯系

  1. 函數有1個返回值,而存儲過程可以有多個或者沒有。

  2. 函數可以在其他語句中直接調用,而存儲過程必須單獨調用。

  3. 函數通常用於計算或較為單一的數據功能,存儲過程相對完成更復雜的復合性的數據功能。

  4. 最關鍵普通語句每次執行都要編譯,而存儲過程只在創建時編譯之後直接調用,速度更快,在大數據復雜功能時尤其明顯。

  5. 存儲過程還可以指定用戶許可權。

㈥ Oracle中 存儲過程,過程和函數有什麼區別和聯系

過程:函數和存儲過程的統稱。

函數:有且僅有一個返回值,可以用於SQL語句中。 如:x := get_X(),select get_X() from al,返回值為函數調用的結果。

存儲過程:無返回值。要返回結果,必須聲明為out參數。
如:sp_x(x,y,z),x和y為in類型參數,z為out/in out類型參數。

在oracle中,封裝工具還有自定義類型、包等。包可以封裝過程和函數,包頭類似JAVA中的介面,包體類似JAVA中實現介面的類。

㈦ oracle資料庫中函數和存儲過程的區別

函數就是函數,跟你用的oracle 內置函數是一樣的,帶參數或者不帶參數,返回一個結果
創建語句 create or replace funtion (……)
存儲過程一邊是處理比較復雜的處理邏輯或者機械化調用等
創建語句 CREATE OR REPLACE PROCEDURE(……)
他倆是不同的東西,存儲可以調用函數,

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

定義:
存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程

帶有參數)來執行它。

存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。

存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。

在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。

優 點:

1. 存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。

2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。

3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。

4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。

存儲過程與函數的對比

存儲過程的優缺點
優點:減少網路交互的成本。
缺點:
a、不可移植性,每種資料庫的內部編程語法都不太相同,當你的系統需要兼容多種資料庫時,最好不要用存儲過程。
b、學習成本高,DBA一般都擅長寫存儲過程,但並不是每個程序員都能寫好存儲過程,除非你的團隊有較多的開發人員熟悉寫存儲過程,否則後期系統維護會產生問題。
c、業務邏輯多處存在,採用存儲過程後也就意味著你的系統有一些業務邏輯不是在應用程序里處理,這種架構會增加一些系統維護和調試成本。
d、存儲過程和常用應用程序語言不一樣,它支持的函數及語法有可能不能滿足需求,有些邏輯就只能通過應用程序處理。
e、如果存儲過程中有復雜運算的話,會增加一些資料庫服務端的處理成本,對於集中式資料庫可能會導致系統可擴展性問題。
f、為了提高性能,資料庫會把存儲過程代碼編譯成中間運行代碼(類似於java的class文件),所以更像靜態語言。當存儲過程引用的對像(表、視圖等等)結構改變後,
存儲過程需要重新編譯才能生效,在24*7高並發應用場景,一般都是在線變更結構的,所以在變更的瞬間要同時編譯存儲過程,這可能會導致資料庫瞬間壓力上升引起故障(Oracle資料庫就存在這樣的問題)。

㈨ oracle 怎麼執行存儲過程跟函數

調用oracle存儲過程用begin...end的方式。
基本語法:
begin
存儲過程名(參數1,參數2……);--如果無參數則省略括弧及括弧內部分end;
如,有存儲過程:
create
or
replace
procere
p_testasv_begintime
varchar2(20);v_endtime
varchar2(20);v_str
varchar2(10);begin
v_begintime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
select
'badkano'
into
v_str
from
al;
v_endtime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
dbms_output.put_line('開始時間為:'||v_begintime);
dbms_output.put_line('結束時間為:'||v_endtime);end;
執行:begin
p_test;end;

熱點內容
怎麼查看我的wifi密碼 發布:2024-04-25 18:54:43 瀏覽:757
fckeditorforjava 發布:2024-04-25 18:50:27 瀏覽:624
優酷上傳視頻需要多久 發布:2024-04-25 18:33:05 瀏覽:675
inf12編譯器 發布:2024-04-25 18:15:39 瀏覽:99
撲克總督3安卓哪裡下載 發布:2024-04-25 18:10:02 瀏覽:395
什麼網站是php 發布:2024-04-25 18:03:42 瀏覽:221
java教程免費下載 發布:2024-04-25 18:02:01 瀏覽:443
i西安編程 發布:2024-04-25 16:55:35 瀏覽:263
核磁看壓縮 發布:2024-04-25 16:37:22 瀏覽:432
訪問不上光貓 發布:2024-04-25 16:13:44 瀏覽:319