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週...