儲存過程和函式目的是為了 可重複地 執行運算元據庫的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 函式只能返回值且只能返回...