儲存過程是什麼?它和函式有什麼異同

時間 2022-03-25 19:40:16

1樓:先飛視覺

儲存過程與函式不同的是:不能直接呼叫過程名返回值,也不能在表示式中使用。

定義:儲存過程是由流控制和sql語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中,應用程式使用時只要呼叫即可。在oracle中,若干個有聯絡的過程可以組合在一起構成程式包。

2樓:匿名使用者

自定義函式 有且只有一個返回值,就像普通的函式一樣,可以直接在表示式中嵌入呼叫。

儲存過程 可以沒有返回值,也可以有任意個輸出引數,必須單獨呼叫。

3樓:梅川娃兒

給個例子你看看吧

【例8-1】 在educational資料庫中建立一個儲存過程spstugrade_class_term,要求返回某班某-學期所有學生的課程成績。

create proc spstugrade_class_term /* 儲存過程名 */

@para_classid char(8), /* 班級名,輸入引數 */

@para_term tinyint=1 /* 學期,輸入引數,預設值為1 */

with encryption /* 使用加密存放 */

asselect s.studentid, s.studentname, c.coursename, g.grade

from grade g inner join student s /* 按studentid聯接student */

on g.studentid = s.studentid inner join course c /* 按courseid聯接course */

on g.courseid = c.courseid inner join speciality_course sc

on g.courseid = sc.courseid /* 按courseid聯接speciality_course */

where s.classid=@para_classid and sc.term=@para_term /* 查詢的班級及學期 */

order by s.studentid

執行儲存過程

呼叫spstugrade_class_term,返回030501班第5學期所有學生的課程成績如下:

use educational

goexecute spstugrade_class_term '030501',5

你覺得這跟函式會相同嗎?

雖然跟函式是一樣的呼叫引數,其實只是區別在儲存過程的結構是那樣,還有變數什麼之類的寫法不同而已,其實功能都是差不多的!

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

4樓:匿名使用者

儲存過程和函式都包含一段處理指令碼,兩者都有返回值,而主要區別也體現在返回值上。

儲存過程的返回值可以通過過程體內return + 一個整數的形式中指過程,返回過程狀態;也可以通過返回引數(output)得到一個返回值。

函式的返回結果就很多了,除了返回各種基本型別,還能返回table型別(內嵌表值函式和多語錄表值函式),暫時能想到的就這些了~

5樓:匿名使用者

mysql教程4 mysql8運算子、函式、儲存過程及新增資料型別 19.mysql之儲存過程與自定義函式的區別 學習猿地

儲存過程和函式有何區別

6樓:匿名使用者

儲存過程和函式目的是為了 可重複地 執行運算元據庫的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 procedure 《過程名》(《引數列表,無參時忽略》)

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 procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

isv_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 procedure 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

isv_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 dual;-- 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;

7樓:匿名使用者

mysql教程4 mysql8運算子、函式、儲存過程及新增資料型別 19.mysql之儲存過程與自定義函式的區別 學習猿地

儲存過程和函式有何區別?

8樓:軍哥會武

1 儲存過程不一定非要有返回值 資料庫中的函式一定有返回值

2 儲存過程在前臺語言可以直接呼叫 而函式一般要有sql語句做為載體

9樓:孑然一身_超

你可以把儲存過程當做:把一系列語句合併到一起的這麼一個整體

函式只是幫助你查詢,會有返回值

儲存過程和函式的區別 10

10樓:匿名使用者

一、含義不同

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

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

二、使用條件不同

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

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

三、執行方式不同

1、儲存過程:儲存過程可以返回引數,如記錄集,函式只能返回值或者表物件。儲存過程的引數有in,out,inout三種,儲存過程宣告時不需要返回型別。

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

初中函式有什麼,初中函式和幾何分別是什麼

烈 1 常量和變數 在某變化過程中可以取不同數值的量,叫做變數 在某變化過程中保持同一數值的量或數,叫常量或常數 2 函式 設在一個變化過程中有兩個變數x與y,如果對於x在某一範圍的每一個值,y都有唯一的值與它對應,那麼就說x是自變數,y是x的函式 3 自變數的取值範圍 1 整式 自變數取一切實數 ...

這個函式的導數怎麼求,過程是什麼

勞卿 湊微分,把x湊成1 2 1 x2 然後就可以帶公式了 瘦子吃胖子看 原函式是 x 1 這個函式的導數怎麼求?求過程,答案 分步導 將x與sqr 4 x 分別看作整體 sqr表示根號 f x sqr 4 x x 1 2sqr 4 x 求函式的導數,求過程 y sin 4 x 4 cos 4 x ...

什麼是中斷控制方式它的基本過程是什麼

亨利林肯 我真的不知道樓上有沒有學過真的。怎麼感覺都像是另一個多元宇宙裡的了。首先常見的傳專輸控制方式有 屬4種。查詢,無條件,中斷和dma。大白話開始 無條件就是不管你外設準備好沒,我直接傳。由於我cpu比你外設快多了。你外設傳東西給cpu,cpu基本上是立馬處理的。所以無條件。查詢就是,cpu週...