PL/SQL(五):預存程序

來源:互聯網
上載者:User

一、預存程序


        用途
               用於執行某項操作,命名的 PL/SQL 塊,能夠接受傳遞的參數,能夠被調用。
        簡述
               命名的PL/SQL塊
               能夠接受參數
               能夠被重複調用
               用於執行某項操作
               儲存在資料庫中


二、過程的參數


      有三種
             1、in 模式
                          預設模式
                          可以傳遞常量或變數
                          在過程內部,不能賦常量
                         允許有預設值,如:p_id in number default 7369
             2、out 模式 
                         調用時,必須用變數,但會忽略變數值
                         調用結束後,對變數賦值
             3、in out 模式
                         傳入參數值,並可以返回改變的值
      備忘:
             不能限制參數中資料類型的大小
 out和in out 參數不允許有預設值

 

四、程式碼範例

 

1、in 模式
     參數模式說明: in , 輸入模式,預設是in .   表示接收值,在過程代碼中不能再賦值.

--in 模式create or replace procedure param_test_in (num int ,num2 in int)asbegin  --num := 12; --in模式的參數,接收到值之後變為常量,不能賦值.  dbms_output.put_line(num+num2);end;declare  n1 int;  n2 int;begin    param_test_in(10,20); --給in模式參數傳常量值.  n1:=200;  n2:=300;  param_test_in(n1,n2); --給in模式參數傳變數.end;


2、out 模式
     參數模式說明:out , 輸出模式. 表示輸出值,在過程代碼中,可以重新賦值.調用時,必須用變數調用.

--in + out 模式 /*  寫一個預存程序,包含兩個參數,p_sal為薪水參數(傳入  參數),p_mes為資訊參數(傳出參數)當傳入的薪水大於所  有薪水平均值時,將‘薪水太高了’資訊傳給資訊參數;否則傳遞  ‘薪水正常’。*/create or replace procedure sal_proc(       p_sal in emp.sal%type,       p_mes out varchar )is  v_sal  emp.sal%type ;begin  select avg(sal) into v_sal from emp ;  if p_sal > v_sal then         p_mes:='薪水太高了';   else         p_mes:='薪水正常';   end if;end;


3、in out 模式
    1)必須要用變數調用
    2)過程可以擷取到輸入變數的值,
    3)過程中變數可重新賦值.
    4)過程執行完,也會輸出值給調用時的變數.

-in + out + in out 模式CREATE OR REPLACE PROCEDURE  raise_sal(p_id   IN     emp.empno%type,  p_name  OUT    varchar2, p_sal  IN OUT  number)ISBEGIN  UPDATE emp   SET sal = sal + p_sal    WHERE empno = p_id;    SELECT sal,ename into p_sal,p_name   FROM   emp  WHERE  empno = p_id;END raise_sal;DECLARE  v_sal  emp.sal%type := 500;  v_name    emp.ename%type;BEGIN  raise_sal(7369,v_name,v_sal);  dbms_output.put_line('僱員:'||v_name||'現在的薪水是 '||v_sal);END;


4、其他常用語句

--命令列中,查看過程的錯誤.show errors PROCEDURE sal_proc;--刪除過程drop procedure sal_proc;--授予許可權  --1)直接授權grant select on emp to system;  -- 表名 emp,使用者名稱 system  --2)間接授權grant execute on sal_proc to system;  --預存程序 sal_proc,使用者名稱 system--查看使用者物件中的procedure和function中的對象名、物件類型 和 狀態SELECT object_name, object_type,statusFROM user_objectsWHERE object_type in ('PROCEDURE','FUNCTION')ORDER BY object_name;--查看類型為【過程】的原始碼,大寫SELECT *FROM   user_sourceWHERE type = 'PROCEDURE';


 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.