--函數和預存程序都可以單獨定義,這個時候它們分別會出現在pl/sql
--functions的檔案夾和Procedures檔案夾下面
--同時它們又可以同時被定義在package裡面
--而定義在一個package裡面的函數或者預存程序與單獨定義在functions檔案夾下的函數以及定義在procedures檔案夾下面的procedure即便是重名了也是不會相互影響的,因為它們的範圍是不一樣的,因為定義在package裡面的函數或者procedure在被調用的時候需要加上包名才行,而且在包裡面的函數又可以調用外部的函數或者是預存程序。
--不過需要瞭解的而是包只是對於方法和函數的一個定義就像是java裡面的介面一樣
--它只是定義了方法體和預存程序體但是沒有實現,實現需要在package body裡面實現
--這主要也是為了一種規範
--因為建立預存程序經常會出錯,建議看看出錯的常見情況:
create or replace function addDept(
f_deptno dept.deptno%type,
f_dname dept.dname%type,
f_loc dept.loc%type
)
return number
as
begin
insert into dept values(f_deptno,f_dname,f_loc);
if sql%found then
return 1;
else
return 0;
end if;
commit;
end;
--建立刪除部門函數
create or replace function deleteDept(
f_deptno dept.deptno%type
)
return number
as
begin
delete from dept where dept.deptno=f_deptno;
if sql%found then
return 1;
else
return 0;
end if;
end;