ORACLE學習12 儲存過程procedure

2021-08-15 20:51:15 字數 1795 閱讀 9537

儲存過程也是一種pl/sql塊,是存入資料庫的pl/sql塊

但儲存過程不同於已經普通的pl/sql程式,我們通常把pl/sql程式稱為無名塊,而儲存過程是以命名的方式儲存於資料庫中的。

因此,我們可以這樣理解,為plsql程式塊起個名字,不用每次都編譯,可以直接呼叫,就是儲存過程。

和pl/sql程式相比,儲存過程有很多優點,具體歸納:

1. 與資料庫關聯。儲存過程的**儲存在資料庫中而非本地,使用者可在任何登陸的客戶機上呼叫修改該儲存過程。

2. **復用性。儲存過程的資訊寫入資料字典,因此是乙個公用模組,我們可以通過兩外的儲存過程和函式呼叫已經存在的儲存過程。

但是,儲存過程不能呼叫plsql程式塊。

3. 儲存過程支援傳遞引數,並支援返回值。

4. 儲存過程需要進行編譯。編譯不通過仍然可以建立,但是通過plsql developer等工具會有警告。

5. 安全性。儲存過程可由資料庫提供安全保證,要想使用儲存過程,需要有儲存過程和函式的所有者的授權,只有被授權的使用者或建立者本身才能執行儲存過程或呼叫函式。

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

create [or replace] procedure 儲存過程名[(引數[in|out|in

out] 資料型別...)]

[說明部分]

begin

可執行部分

[exception

錯誤處理部分]

end [過程名];

儲存過程可以傳入引數,支援三種引數型別:

create

or replace procedure

p(v_in in number, v_out out number, v_v number, v_io in

out number)

isbegin

if(v_in>v_v)

then

v_out := v_in;

else

v_out := v_v;

endif; v_io := v_io + 1;

end;

/

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

儲存過程有兩種執行方式:

方式一:通過exec關鍵字執行。

exec p;
方式二:通過plsql塊執行。

begin 

p;end;

因此基於方法二,我們可以通過儲存過程呼叫儲存過程,也可以通過plsql塊呼叫儲存過程,還可以通過job週期性呼叫儲存過程。

如下,我們通過plsql塊呼叫上述建立的儲存過程。

;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;

/直接通過dorp關鍵字。

drop procedure

p;

Oracle儲存過程學習

儲存過程是一組為了完成特定功能的 sql 語句塊,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。1 儲存過程和函式以命名的資料庫物件形式儲存於資料庫當中。儲存在資料庫中的優點是很明顯的,因為 不儲存在本地,使用者可以在任何客戶機上登入到資料庫,並呼...

Oracle儲存過程學習

儲存過程建立語法 create or replace procedure 儲存過程名 param1 in type,param2 out type as 變數1 型別 值範圍 變數2 型別 值範圍 begin select count into 變數1 from 表a where列名 param1 ...

Oracle儲存過程學習

儲存過程建立語法 create or replace procedure 儲存過程名 param1 in type,param2 out type as 變數1 型別 值範圍 變數2 型別 值範圍 begin select count into 變數1 from 表a where列名 param1 ...