Oracle中函數(shù)和存儲過程的區(qū)別總結版

昨天下午和今天上午找了也看了很多資料痒谴,現(xiàn)在基本上已經(jīng)把二者的區(qū)別理清楚,以后不要再弄混淆铡羡,也算是一種小小的進步吧积蔚,而不去想以后會怎樣。


一烦周、主要區(qū)別

**
**
1尽爆、二者最大的區(qū)別是:

  • 1).函數(shù)(function)總是向調用者返回數(shù)據(jù),并且一般只返回一個值读慎;
  • 2).存儲過程(procedure)不直接返回數(shù)據(jù)漱贱,但可以改變輸出參數(shù)的值,這可以近似看作能返回值夭委,且存儲過程輸出參數(shù)的值個數(shù)沒有限制幅狮。

從一般應用上來看,如果不需要返回值或者需要多個返回值闰靴,使用存儲過程彪笼,如果只用一個返回值,就使用函數(shù)蚂且。

2配猫、function定義中只能有DDL(如select等)語句;procedure中主要是DML語句(對數(shù)據(jù)庫進行復雜操作時,如對多個表進行Update杏死、Insert泵肄、Query捆交、Delete時)。

如果想要使用select的結果集腐巢,則要使用游標

**
**
以下需要注意的地方是:

  • 1).定義函數(shù)或者存儲過程時品追,IN/OUT表示調用函數(shù)時,傳進來或傳出去的參數(shù)冯丙。如果沒有說明in/out肉瓦,則默認為in;
  • 2).定義的函數(shù)必須要有return子句胃惜,其后緊跟著返回值得類型泞莉;
  • 3).實際調用函數(shù)或存儲過程時,在declare中聲明的變量至少應該對應創(chuàng)建的函數(shù)或存儲過程中的OUT參數(shù)和return參數(shù)合起來的個數(shù)船殉;
  • 4).可以建立不帶參數(shù)(即沒有返回的參數(shù))鲫趁、沒有變量的存儲過程。

**
**

  • 5)執(zhí)行方式略有不同利虫,存儲過程的執(zhí)行方式有兩種(1.使用execute2.使用begin和end)挨厚,函數(shù)除了存儲過程的兩種方式外,還可以當做表達式使用糠惫,例如放在select中(select f1() form dual;)疫剃。

3、存儲過程的命名最好以proc_打頭寞钥,函數(shù)則是func_打頭慌申,變量則應該用v_打頭陌选。

Paste_Image.png

二理郑、實際舉例

**
**
1、函數(shù)

(1)創(chuàng)建函數(shù)
create or replace function get_salary(
    dept_no number,
    emp_count **out** number)
    return number IS
    v_sum number;
begin
    ...
exception
    ...
end get_salary

(2)調用函數(shù)
declare 
    v_num number;
    v_sum number;
begin
    ...(這里應該出現(xiàn)函數(shù)名表示調用)
end

2咨油、存儲過程

(1)創(chuàng)建存儲過程
create or replace procedure pro_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...
exception
    ...
end proc_demo;

(2)調用存儲過程
調用語法:

1)您炉、exec <過程名>;

2)、execute <過程名>;

3)役电、在PL/SQL語句塊中直接調用赚爵。
例如:    
declare
    v_num number;
    v_sum number(8,2);
begin
    procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(這里出現(xiàn)存儲過程名表示調用,傳遞參數(shù)值用=>)
end;
3法瑟、本地存儲過程

在PL/SQL中還可以在declare塊中建立本地存儲過程冀膝,而不使用關鍵字create,其目的是:不用將存儲過程存儲在數(shù)據(jù)庫中霎挟,避免更改數(shù)據(jù)庫時帶來的麻煩窝剖,其主要的使用場景是,臨時使用某個存儲過程酥夭,而不是在以后要重復多次使用赐纱。

例子:
declare
    v_num number;
    v_sum number(8,2);
procedure proc_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...(這里不用出現(xiàn)存儲過程名)
exception
    ...
end proc_demo;

**
**

這里再次復習一下DDL(data defined language)脊奋,DML(data manipulation language ),DCL(data control language)的區(qū)別:

  • 1).DDL的操作對象(表)
    Create語句:可以創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫的一些對象疙描。
    Drop語句:可以刪除數(shù)據(jù)表诚隙、索引、觸發(fā)程序起胰、條件約束以及數(shù)據(jù)表的權限等久又。
    Alter語句:修改數(shù)據(jù)表定義及屬性。

  • 2).DML操作的對象是記錄(即數(shù)據(jù))
    最常見的是增(insert)效五、刪(delete)籽孙、改(update)、查(select)

  • 3).DCL操作的對象是數(shù)據(jù)庫用戶的權限
    Grant語句:允許對象的創(chuàng)建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權限火俄。
    Revoke語句:可以廢除某用戶或某組或所有用戶訪問權限

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末犯建,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓜客,更是在濱河造成了極大的恐慌适瓦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谱仪,死亡現(xiàn)場離奇詭異玻熙,居然都是意外死亡,警方通過查閱死者的電腦和手機疯攒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門嗦随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敬尺,你說我怎么就攤上這事枚尼。” “怎么了砂吞?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵署恍,是天一觀的道長。 經(jīng)常有香客問我蜻直,道長盯质,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任概而,我火速辦了婚禮呼巷,結果婚禮上,老公的妹妹穿的比我還像新娘赎瑰。我一直安慰自己王悍,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布乡范。 她就那樣靜靜地躺著配名,像睡著了一般啤咽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠脉,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天宇整,我揣著相機與錄音,去河邊找鬼芋膘。 笑死鳞青,一個胖子當著我的面吹牛,可吹牛的內容都是我干的为朋。 我是一名探鬼主播臂拓,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼习寸!你這毒婦竟也來了胶惰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霞溪,失蹤者是張志新(化名)和其女友劉穎孵滞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸯匹,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡坊饶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了殴蓬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿级。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖染厅,靈堂內的尸體忽然破棺而出痘绎,到底是詐尸還是另有隱情,我是刑警寧澤糟秘,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布简逮,位于F島的核電站,受9級特大地震影響尿赚,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蕉堰,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一凌净、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屋讶,春花似錦冰寻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轻腺。三九已至,卻和暖如春划乖,著一層夾襖步出監(jiān)牢的瞬間贬养,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工琴庵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留误算,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓迷殿,卻偏偏與公主長得像儿礼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庆寺,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容