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