PL/SQL子程序 分爲 過程,方法等。他們的創建是放在緩衝區的,所以定義,執行後不能得到保存,重複使用。這樣就爲什麼會有了存儲過程 和 存儲函數了。這兩種今後學習。恩,™是進過編譯後存放在工作區的。額,繼續過程 和 方法。
一如既往,首先來看他們的定義
過程 |
函數 |
procedure 過程名(參數1,參數2.....) is 變量聲明 begin 可執行部分 exception 異常處理部分 end; |
function 函數名(參數1,參數2.....)return 數據類型 is 變量聲明 begin 可執行部分 return語句。 exception 異常處理部分 end; |
從上面可以看出他們至少有三個區別:
1. 關鍵字不同 過程爲 procedure 函數爲 function ,廢話,但是procedure會寫嚒,羅嗦
2.函數是可以有返回值的,注意到了嚒,return 數據類型。
3.正因爲第二點,纔有了第三點,函數在可執行部分至少有一條return 語句。
如何使用,結合PL/SQL程序塊執行模式:
declare
......
begin
.......
end;
將上面定義放到declare部分,就可以用起來了。爲什麼不趕緊試試。
碼農們更多的使用到的可能是 存儲型的 過程和函數吧。那不妨接下來講講他們?
上面提到存儲過程和存儲函數他們是在創建後,經過系統編譯存放在oracle數據庫工作區中的,所以一次編譯,隨時運行。在建立之後就能隨時調用了,當然你必須得保證編譯通過了。也正是這個原因,所以存儲過程函數一旦新建後,不能修改,那怎麼做呢,只能刪掉重新建立了唄。
存儲過程的部分有三:一聲明部分、二執行部分、三異常處理部分(面試官最喜歡問的)
create or replace procedure 存儲過程名(參數1,參數2......)
[authid current_user|definer] --訪問控制, 選擇有二,當前用戶 和所有用戶
as -- as 和遊標進行區別 is
聲明部分;
begin
執行部分;
exception
異常部分;
end;
來點DBA知識,
A 授權 用戶執行:grant execute on 存儲過程名 to 用戶名;
B 執行存儲過程:execute 過程名(實際參數);
C 刪除過程: drop 存儲過程名;
存儲函數 類似,他們不同點,能夠想到吧,想想子程序 過程和函數區別。
create or replace function 存儲函數名(參數1,參數2......) return 返回值
[authid current_user|definer] --訪問控制, 選擇有二,當前用戶 和所有用戶
as -- as 和遊標進行區別 is
聲明部分;
begin
執行部分;
return 表達式;
exception
異常部分;
end;
看出來不同點了吧,看出來了吧。不說了。