當前位置:首頁 » 服務存儲 » 資料庫存儲器函數區別
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫存儲器函數區別

發布時間: 2022-07-22 18:57:55

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

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

『貳』 存儲過程和函數的區別

一、含義不同

1、存儲過程:存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。

2、函數:是由一個或多個 SQL 語句組成的子程序,可用於封裝代碼以便重新使用。函數限制比較多,如不能用臨時表,只能用表變數等

二、使用條件不同

1、存儲過程:可以在單個存儲過程中執行一系列 SQL 語句。而且可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。

2、函數:自定義函數諸多限制,有許多語句不能使用,許多功能不能實現。函數可以直接引用返回值,用表變數返回記錄集。但是,用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。

三、執行方式不同

1、存儲過程:存儲過程可以返回參數,如記錄集,函數只能返回值或者表對象。存儲過程的參數有in,out,inout三種,存儲過程聲明時不需要返回類型。

2、函數:函數參數只有in,而函數需要描述返回類型,且函數中必須包含一個有效的return語句。

『叄』 資料庫存儲過程、函數、觸發器的區別

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

『肆』 資料庫中存儲過程和函數的區別是什麼用自己的話回答。

存儲過程:可以進行增刪查改dml操作,甚至可以進行建表等ddl操作;不能return返回值,可以用out參數返回值。用exec 過程名 的方法調用。
函數,可以return返回值;一般來說,只能進行select操作,不能進行增刪改,也不能進行ddl操作。可以通過賦值的方式調用,也可以在sql語句中使用。

『伍』 mysql 存儲過程和函數的區別

mysql 存儲過程和函數的區別

1、

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

存儲過程,功能強大,可以執行包括修改表等一系列資料庫操作;

用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。


2、

對於存儲過程來說可以返回參數,如記錄集,函數只能返回值或者表對象。

函數只能返回一個變數;而存儲過程可以返回多個;

存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類;

存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。



3、

存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。




4、

存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用)。

由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。 SQL語句中不可用存儲過程,而可以使用函數。

『陸』 資料庫存儲過程和函數的區別

1.一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。
2.對於存儲過程來說可以返回參數,而函數只能返回值或者表對象。

3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。

4.當存儲過程和函數被執行的時候,SQL Manager會到procere cache中去取相應的查詢語句,如果在procere cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。

『柒』 1,存儲過程和函數的區別

存儲過程和函數目的是為了 可重復地 執行操作資料庫的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;
/

『捌』 mysql中的函數和存儲過程的區別

存儲過程與函數的區別
本質上沒區別,執行的本質都一樣。
只是函數有如:只能返回一個變數的限制。而存儲過程可以返回多個。
函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程要讓sql的query 可以執行, 需要把 mysql_real_connect 的最後一個參數設置為CLIENT_MULTI_STATEMENTS。
函數限制比較多,比如不能用臨時表,只能用表變數.還有一些函數都不可用等等.而存儲過程的限制相對就比較少。

特性區別如下:

1)一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,可以執行包括修改表等一系列資料庫操作;用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。

2)對於存儲過程來說可以返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變數;而存儲過程可以返回多個。存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。
3)存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。
4)存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。 SQL語句中不可用存儲過程,而可以使用函數。

當存儲過程和函數被執行的時候,SQL Manager會到procere cache中去取相應的查詢語句,如果在procere cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。
Procere cache中保存的是執行計劃 (execution plan) ,當編譯好之後就執行procere cache中的execution plan,之後SQL SERVER會根據每個execution plan的實際情況來考慮是否要在cache中保存這個plan,評判的標准一個是這個execution plan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。
MYSql存儲過程的作用及語法
作用:
1、使用存過過程,很多相似性的刪除,更新,新增等操作就變得輕鬆了,並且以後也便於管理!
2、存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快。
3、存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因。
4、存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。
5、存儲過程主要是在伺服器上運行,減少對客戶機的壓力。
6、存儲過程可以包含程序流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
7、存儲過程可以在單個存儲過程中執行一系列SQL語句。
8、存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
一、創建存儲過程
create procere sp_name()
begin
.........
end12341234

二、調用存儲過程
call sp_name()11

注意:存儲過程名稱後面必須加括弧,哪怕該存儲過程沒有參數傳遞
三、刪除存儲過程
drop procere sp_name//11

注意:不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程
四、區塊,條件,循環
1、區塊定義,常用
begin
......
end;123123

也可以給區塊起別名,如:
lable:begin
...........
end lable;123123

可以用leave lable;跳出區塊,執行區塊以後的代碼
2、條件語句
if 條件 then
statement
else
statement
end if;1234512345

3、循環語句
(1)while循環
[label:] WHILE expression DO

statements

END WHILE [label] ;1234512345

(2)、loop循環
[label:] LOOP

statements

END LOOP [label];1234512345

(3)、repeat until循環
[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;12345671234567

五、其他常用命令
1.show procere status
顯示資料庫中所有存儲的存儲過程基本信息,包括所屬資料庫,存儲過程名稱,創建時間等
2.show create procere sp_name
顯示某一個存儲過程的詳細信息
函數function示例
CREATE DEFINER=`root`@`%` FUNCTION `spr_checkadmin`(acckey varchar(32), accpwd varchar(64)) RETURNS int(11)
BEGIN
DECLARE x INT;
SELECT COUNT(*) INTO x FROM admins WHERE account=acckey AND passwd=accpwd;
RETURN(x);
END;123456123456

單個返回值的存儲過程
CREATE DEFINER=`root`@`%` PROCEDURE `spr_getuserstorage`(tok varchar(128))
BEGIN
DECLARE acc VARCHAR(32);
DECLARE pkgid VARCHAR(32);
DECLARE regdate DATETIME;
DECLARE logindate DATETIME;
DECLARE sumsize BIGINT;
SELECT account INTO acc FROM userinfo WHERE token=tok;
IF (acc != NULL) THEN
SELECT SUM(filesize) INTO sumsize FROM userfiles WHERE account=acc;
SELECT packageid, registerdate, lastlogindate INTO pkgid, regdate, logindate FROM userinfo WHERE account=acc;
SELECT 0,pkgid,regdate,logindate;
ELSE
SELECT(-1);
END IF;

多個返回值存儲過程
CREATE DEFINER=`root`@`%` PROCEDURE `spr_queryfolderallfile`(sToken varchar(32), OUT sfid varchar(32), OUT sfext varchar(32))
BEGIN
DECLARE acc CHAR(32);
SELECT account INTO acc FROM userinfo WHERE token=sToken;
IF (acc != NULL) THEN
SELECT fileid, fileext INTO sfid, sfext FROM userfiles WHERE account=acc AND filetype=1;
END IF;
END;1234567812345678

『玖』 Mysql存儲過程和函數的區別

本質上沒區別。只是函數有如:只能返回一個變數的限制。而存儲過程可以返回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程不行。執行的本質都一樣。
函數限制比較多,比如不能用臨時表,只能用表變數.還有一些函數都不可用等等.而存儲過程的限制相對就比較少
1. 一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。
2. 對於存儲過程來說可以返回參數,而函數只能返回值或者表對象。
3. 存儲過程一般是作為一個獨立的部分來執行(EXEC執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。
4. 當存儲過程和函數被執行的時候,SQL Manager會到procere cache中去取相應的查詢語句,如果在procere cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。