日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

存储过程和函数的区别

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 存储过程和函数的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

存儲過程和函數(shù)目的是為了 可重復地 執(zhí)行操作數(shù)據(jù)庫的sql語句的集合。

區(qū)別是寫法和調(diào)用上。

寫法上:存儲過程的參數(shù)列表可以有輸入?yún)?shù)、輸出參數(shù)、可輸入輸出的參數(shù);

??????????? 函數(shù)的參數(shù)列表只有輸入?yún)?shù),并且有return <返回值類型,無長度說明>。

返回值上:

    存儲過程的返回值,可以有多個值,

?????????? 函數(shù)的返回值,只有一個值。

調(diào)用方式上:

    存儲過程的調(diào)用方式有:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調(diào)用。

????????????函數(shù)的調(diào)用方式有:

      在PL/SQL語句塊中直接調(diào)用。

???????????????? 具體分為:

  ----調(diào)用FUNCTION add_three_numbers

  ----1. 位置表示法調(diào)用函數(shù)

  BEGIN

  dbms_output.put_line(add_three_numbers(2,4,5));

  END;

  ----2. 命名表示法調(diào)用函數(shù)

  BEGIN

  dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

  END;

  ----3. 混合使用位置表示法和命名表示法調(diào)用函數(shù)

  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調(diào)用表示法 --混合表示法

  SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

?

----1. 該函數(shù)接受3個可選參數(shù),返回3個數(shù)字的和

  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 <過程名>(<參數(shù)列表,無參時忽略>)

as|is

變量聲明、初始化

begin

業(yè)務處理、邏輯代碼

exception

異常捕獲、容錯處理

end <過程名>;

參數(shù):<參數(shù)名> in|out|in out <參數(shù)類型,無長度說明> ,如:v_name varchar2

in:入?yún)?/p>

out:出參

in out:出入?yún)?/p>

注:as|is表示as或is

調(diào)用語法:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調(diào)用。

例:

create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

is

v_temp varchar2(20);

begin

dbms_output.put_line('交換前參數(shù)1:'||v_param1||' 參數(shù)2:'||v_param2);

v_temp:=v_param1;

v_param1:=v_param2;

v_param2:=v_temp;

dbms_output.put_line('交換后參數(shù)1:'||v_param1||' 參數(shù)2:'||v_param2);

exception

when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');

end up_wap;

/

-- 調(diào)用存儲過程

declare

v_param1 varchar2(20):='param1';

v_param2 varchar2(20):='param2';

begin

up_wap(v_param1 => v_param1,v_param2 => v_param2);

end;

/

?

?自定義函數(shù)(function)

基本語法:

create function <函數(shù)名>(<參數(shù)列表,無參時忽略>)

return <返回值類型,無長度說明>

as|is

變量聲明、初始化

begin

業(yè)務處理、邏輯代碼

return <返回的值>;

exception

異常捕獲、容錯處理

end <函數(shù)名>;

參數(shù):in 入?yún)?/p>

注:只有入?yún)⒌念愋汀?/p>

在存儲過程和自定義函數(shù)中的參數(shù)的傳遞(入?yún)⒑统鰠?#xff09;不能使用%type或%rowtype匹配,不能使用空值null,但是存儲過程可以返回空值。

例:

create function uf_select_name_by_id_test(v_id in number)

return varchar2

is

v_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調(diào)用

declare --pl/sql語句塊調(diào)用

v_name varchar2(20);

begin

v_name:=uf_select_name_by_id_test(1);

dbms_output.put_line('name = '||v_name);

end;

/

總結

以上是生活随笔為你收集整理的存储过程和函数的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。