CREATE PROCEDURE介紹
語法說明
- 建立預儲程式,指定 [OR REPLACE] 可以再次建立已建立的程序,此時不需要再次授與該程序的物件權限,也不需再次授與程序權限給己持有該權限的使用者,另外,預儲程序和使用者定義函數的預儲函數不同,前者不能將值傳回叫用來源
格式
CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name
[(argument [IN | OUT | IN OUT][,argument [IN | OUT | IN OUT]...])]
[AUTHID {CURRENT_USER | DEFINER}]
{IS | AS}
procedure_statement
END [procedure_name];
schema : 結構名稱
procedure_name : 要建立的程序名稱
argument : 引數內容
IN : 在程序啟動時接受值,在程序內無法變更此引數值
OUT : 將程序內代入此引數的值,於程序結束時傳回至叫用來源
IN OUT : IN和OUT組成的模式,程序啟動時交出引數,在程序內也能將值代入此引數,且代入到引數的值,於程序結束值,會傳回至叫用來源
CURRENT_USER : 以目前執行中的使用者權限來執行程序,所建立的程序稱為 [執行者權限程序]
DEFINER : 以程序所在的結構擁有者權限來執行,所建立的程式包裝稱為 [定義者權限程序] ,AUTHID子句的預設值為AUTHID DEFINER
語法示範
說明 : 建立預儲程序emp2
create or replace procedure emp2
is
begin
update emp set salary=2000 where emp_id=101;
end;
/
說明 : 執行預儲程序emp2
execute emp2;
說明 : 建立預儲程序emp3
create or replace procedure emp3
(empno in number,result out number)
is
begin
delete from emp where emp.emp_no = empno;
result := 0;
exception
when others then
result := 9;
end;
/
說明 : 執行預儲程序emp3
declare
wk_result number := 0;
begin
emp3(1,wk_result);
DBMS_OUTPUT_PUT_LINE(to_char(wk_result));