當前位置:首頁 » 存儲配置 » 函數存儲過程區別

函數存儲過程區別

發布時間: 2022-07-12 12:02:24

資料庫存儲過程和函數有什麼區別

函數分兩種,表值函數跟標量函數
表值函數最後要返回一個表變數,而標量函數最後要返回一個標量值
存儲過程即一組批處理,可以返回或不返回值,僅僅是執行其內部的全部語句
函數可以與一般sql語句一同編寫,而存儲過程不可以,需要單獨執行

❷ 存儲過程和函數的區別是什麼

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

❸ 函數和存儲過程的區別

函數和存儲過程對SQL SERVER來說有很大的區別:
1.在SQL SERVER2K以前,沒有自定義函數UDF,只有系統函數。
2.無論系統函數和UDF,在系統啟動是就進行編譯並載入,所以UDF的效率比SP要高,SP只是在調用時才載入(擴展的存儲過程除外)。
3.有些函數getdate,exec..都在UDF里不能用!
4.函數必須有返回值,SP則不一定。
5.函數可以包括在FROM子句中,SP則不可以。
6.在SQL SERVE2K中SP可以DEBUG,UDF不可以。 用戶定義函數
函數是由一個或多個 Transact-SQL 語句組成的子程序,可用於封裝代碼以便重新使用。Microsoft® SQL Server™ 2000 並不將用戶限制在定義為 Transact-SQL 語言一部分的內置函數上,而是允許用戶創建自己的用戶定義函數。

可使用 CREATE FUNCTION 語句創建、使用 ALTER FUNCTION 語句修改、以及使用 DROP FUNCTION 語句除去用戶定義函數。每個完全合法的用戶定義函數名 (database_name.owner_name.function_name) 必須唯一。

必須被授予 CREATE FUNCTION 許可權才能創建、修改或除去用戶定義函數。不是所有者的用戶在 Transact-SQL 語句中使用某個函數之前,必須先給此用戶授予該函數的適當許可權。若要創建或更改在 CHECK 約束、DEFAULT 子句或計算列定義中引用用戶定義函數的表,還必須具有函數的 REFERENCES 許可權。

在函數中,區別處理導致刪除語句並且繼續在諸如觸發器或存儲過程等模式中的下一語句的 Transact-SQL 錯誤。在函數中,上述錯誤會導致停止執行函數。接下來該操作導致停止喚醒調用該函數的語句。

用戶定義函數的類型
SQL Server 2000 支持三種用戶定義函數:

標量函數

內嵌表值函數

多語句表值函數

存儲過程
存儲過程可以使得對資料庫的管理、以及顯示關於資料庫及其用戶信息的工作容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。存儲過程存儲在資料庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行以及其它強大的編程功能。

存儲過程可包含程序流、邏輯以及對資料庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。

可以出於任何使用 SQL 語句的目的來使用存儲過程,它具有以下優點:

可以在單個存儲過程中執行一系列 SQL 語句。

可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。

存儲過程在創建時即在伺服器上進行編譯,所以執行起來比單個 SQL 語句快。 存儲過程可能單獨完成一些內容,可以單獨進行。
函數可以在試子中調用,比如可以進行一些計算等,不能單獨執行。

❹ 資料庫存儲過程、函數、觸發器的區別是什麼

三者差別:

1、存儲過程實現的功能要復雜一點,而函數實現的功能針對性比較強。;

2、存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用;

3、觸發器是特殊的存儲過程,存儲過程需要程序調用,而觸發器會自動執行。

分別含義:

1、存儲過程的特點

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

② 當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來。

③可以在過程中調用另一個存儲過程。可以在存儲過程中調用函數。這可以簡化一系列復雜語句。

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

⑤參數有三種(IN、OUT、IN OUT),可返回多個參數值。

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

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

2、函數的特點

①函數只有一種參數(IN),只有一條RETURN語句,只能返回單一的值。

②可在SQL語句(DML或SELECT)中調用函數。由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。

3、觸發器的特點

觸發器是特殊的存儲過程,存儲過程需要程序調用,而觸發器會自動執行。

❺ 存儲過程和函數有何區別

存儲過程和函數目的是為了 可重復地 執行操作資料庫的sql語句的集合。

區別是寫法和調用上。

寫法上:存儲過程的參數列表可以有輸入參數、輸出參數、可輸入輸出的參數;

函數的參數列表只有輸入參數,並且有return <返回值類型,無長度說明>。

返回值上:

存儲過程的返回值,可以有多個值,

函數的返回值,只有一個值。

調用方式上:

存儲過程的調用方式有:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調用。

函數的調用方式有:

在PL/SQL語句塊中直接調用。

具體分為:

----調用FUNCTION add_three_numbers

----1. 位置表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(2,4,5));

END;

----2. 命名表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

END;

----3. 混合使用位置表示法和命名表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));

END;

----4. 排除表示法

BEGIN

dbms_output.put_line(add_three_numbers(12,c=>2));

END;

----5. sql調用表示法 --混合表示法

SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

----1. 該函數接受3個可選參數,返回3個數字的和

CREATE OR REPLACE FUNCTION add_three_numbers

(

a NUMBER:=0, b NUMBER:=0, c NUMBER:=0

)

RETURN NUMBER IS

BEGIN

RETURN a+b+c;

END;

存儲過程:

基本語法:

create procere <過程名>(<參數列表,無參時忽略>)

as|is

變數聲明、初始化

begin

業務處理、邏輯代碼

exception

異常捕獲、容錯處理

end <過程名>;

參數:<參數名> in|out|in out <參數類型,無長度說明> ,如:v_name varchar2

in:入參

out:出參

in out:出入參

註:as|is表示as或is

調用語法:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調用。

例:

create or replace procere up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

is

v_temp varchar2(20);

begin

dbms_output.put_line('交換前參數1:'||v_param1||' 參數2:'||v_param2);

v_temp:=v_param1;

v_param1:=v_param2;

v_param2:=v_temp;

dbms_output.put_line('交換後參數1:'||v_param1||' 參數2:'||v_param2);

exception

when others then dbms_output.put_line('There is a error when the procere up_wap executing!');

end up_wap;

/

-- 調用存儲過程

declare

v_param1 varchar2(20):='param1';

v_param2 varchar2(20):='param2';

begin

up_wap(v_param1 => v_param1,v_param2 => v_param2);

end;

/

自定義函數(function)

基本語法:

create function <函數名>(<參數列表,無參時忽略>)

return <返回值類型,無長度說明>

as|is

變數聲明、初始化

begin

業務處理、邏輯代碼

return <返回的值>;

exception

異常捕獲、容錯處理

end <函數名>;

參數:in 入參

註:只有入參的類型。

在存儲過程和自定義函數中的參數的傳遞(入參和出參)不能使用%type或%rowtype匹配,不能使用空值null,但是存儲過程可以返回空值。

例:

create function uf_select_name_by_id_test(v_id in number)

return varchar2

is

v_name t_test.t_name%type;

begin

select t_name into v_name from t_test where t_id=v_id;

return v_name;

exception

when others then dbms_output.put_line('error');

end uf_select_name_by_id_test;

/

select uf_select_name_by_id_test(1) 姓名 from al;-- select調用

declare --pl/sql語句塊調用

v_name varchar2(20);

begin

v_name:=uf_select_name_by_id_test(1);

dbms_output.put_line('name = '||v_name);

end;

/

❻ 函數和存儲過程的區別

函數一般是傳入一個
標量
參數,也就是某個具體的值,進行適當加工後返回合適的結果。函數不允許進行
資料庫操作
,比如在函數里是不允許執行
SQL語句
的。

存儲過程
也可以接受參數,不過它一般是依據傳入的參數對數據進行不同的處理,這時一般是執行SQL語句操作數據。

❼ 函數和存儲過程區別

函數只是對某個數據進行的一個運算,存儲過程能對整批數據進行處理,不是簡單的運算!

❽ 存儲過程和函數分別是什麼呢,有什麼區別

存儲過程和函數都包含一段處理腳本,兩者都有返回值,而主要區別也體現在返回值上。
存儲過程的返回值可以通過過程體內return + 一個整數
的形式中指過程,返回過程狀態;也可以通過返回參數(output)得到一個返回值。
函數的返回結果就很多了,除了返回各種基本類型,還能返回table類型(內嵌表值函數和多語錄表值函數),暫時能想到的就這些了~

熱點內容
我的世界伺服器復制物品bug2020 發布:2024-10-08 13:35:28 瀏覽:391
python表格抓取 發布:2024-10-08 13:30:31 瀏覽:718
編寫定時下載ftp文件腳本 發布:2024-10-08 13:30:18 瀏覽:227
電腦上怎麼看本機的配置 發布:2024-10-08 13:26:02 瀏覽:42
androidepub 發布:2024-10-08 13:25:22 瀏覽:549
怎麼拿雲伺服器做進銷存 發布:2024-10-08 13:25:14 瀏覽:725
小本解說伺服器是什麼 發布:2024-10-08 13:25:09 瀏覽:394
安卓倍速腳本 發布:2024-10-08 13:18:48 瀏覽:78
飢荒本地伺服器後續怎麼添加伺服器模組 發布:2024-10-08 13:18:24 瀏覽:200
阿里雲伺服器centos7還是8 發布:2024-10-08 13:16:16 瀏覽:719