儲存過程和函式的區別

2021-09-06 05:38:46 字數 3162 閱讀 5200

儲存過程和函式目的是為了 可重複地 執行運算元據庫的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;

儲存過程和函式的區別

儲存過程和函式目的是為了 可重複地 執行運算元據庫的sql語句的集合。區別是寫法和呼叫上。寫法上 儲存過程的引數列表可以有輸入引數 輸出引數 可輸入輸出的引數 函式的引數列表只有輸入引數,並且有return 返回值型別,無長度說明 返回值上 儲存過程的返回值,可以有多個值,函式的返回值,只有乙個值。...

儲存過程和函式的區別

儲存過程和函式目的是為了 可重複地 執行運算元據庫的sql語句的集合。區別是寫法和呼叫上。識別符號不同 函式的識別符號為function 儲存過程為 procedure。引數 儲存過程的引數列表可以有輸入引數 輸出引數 可輸入輸出的引數 函式的引數列表只有輸入引數,並且有return 返回值型別,無...

儲存過程和函式的區別

儲存過程 我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。區別 1 函式只能返回值且只能返回...