儲存過程和函式的區別

2021-09-17 22:38:02 字數 3216 閱讀 3663

儲存過程和函式目的是為了 可重複地 執行運算元據庫的sql語句的集合。

區別是寫法和呼叫上。

識別符號不同:函式的識別符號為function;

儲存過程為:procedure。

引數:   儲存過程的引數列表可以有輸入引數、輸出引數、可輸入輸出的引數;

函式的引數列表只有輸入引數,並且有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語句的集合。區別是寫法和呼叫上。寫法上 儲存過程的引數列表可以有輸入引數 輸出引數 可輸入輸出的引數 函式的引數列表只有輸入引數,並且有return 返回值型別,無長度說明 返回值上 儲存過程的返回值,可以有多個值,函式的返回值,只有乙個值。...

儲存過程和函式的區別

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