ORACLE學習12:存儲過程procedure

1.概述

存儲過程也是一種PL/SQL塊,是存入數據庫的PL/SQL塊
但存儲過程不同於已經普通的PL/SQL程序,我們通常把PL/SQL程序稱爲無名塊,而存儲過程是以命名的方式存儲於數據庫中的。
因此,我們可以這樣理解,爲PLSQL程序塊起個名字,不用每次都編譯,可以直接調用,就是存儲過程。

2.存儲過程優點

和PL/SQL程序相比,存儲過程有很多優點,具體歸納:
1. 與數據庫關聯。存儲過程的代碼保存在數據庫中而非本地,用戶可在任何登陸的客戶機上調用修改該存儲過程。
2. 代碼複用性。存儲過程的信息寫入數據字典,因此是一個公用模塊,我們可以通過兩外的存儲過程和函數調用已經存在的存儲過程。
但是,存儲過程不能調用PLSQL程序塊。
3. 存儲過程支持傳遞參數,並支持返回值。
4. 存儲過程需要進行編譯。編譯不通過仍然可以創建,但是通過PLSQL developer等工具會有警告。
5. 安全性。存儲過程可由數據庫提供安全保證,要想使用存儲過程,需要有存儲過程和函數的所有者的授權,只有被授權的用戶或創建者本身才能執行存儲過程或調用函數。

3.創建存儲過程

存儲過程create or replace procedure p is相當於PLSQL中的declare,其餘都和PLSQL基本一致。

CREATE [OR REPLACE] PROCEDURE 存儲過程名[(參數[IN|OUT|IN OUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END [過程名];

3.1存儲過程三種參數類型

存儲過程可以傳入參數,支持三種參數類型:

  • 傳入參數:in或者不寫;
  • 傳出參數:out,類似於返回值return。
  • 傳入傳出參數: in out 既是傳入又是傳出。
    這裏需要理解,存儲過程的參數都是存儲過程和調用環境的交互。

3.1創建簡單存儲過程

create or replace procedure p(v_in in number, v_out out number, v_v number, v_io in out number)
is 
begin
    if(v_in>v_v) then 
        v_out := v_in;
    else
        v_out := v_v;
    end if;
    v_io := v_io + 1;
end;
/

這裏需要注意的是,如果存儲過程中出現語法錯誤,仍然會創建。

3.2執行存儲過程

存儲過程有兩種執行方式:
方式一:通過exec關鍵字執行。

exec p;

方式二:通過PLSQL塊執行。

begin 
    p; 
end;

因此基於方法二,我們可以通過存儲過程調用存儲過程,也可以通過PLSQL塊調用存儲過程,還可以通過JOB週期性調用存儲過程。

如下,我們通過PLSQL塊調用上述創建的存儲過程。

set serveroutput on;

declare
    v_in number := 10;
    v_v number := 20;
    v_io number := 30;
    v_out number;
begin
    p(v_in, v_out, v_v, v_io);
    dbms_output.put_line(v_out);
    dbms_output.put_line(v_io);
end;
/

3.3刪除存儲過程

直接通過dorp關鍵字。

drop procedure p;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章