Oracle——傳入和傳出參數


三種參數模式:in,out,in out

1.in參數(只讀參數)

   ▪當過程被調用時,實參的值將傳入該過程

   ▪形參的值不能被修改,只能被存儲過程讀取,也就是說形參不能作為賦值目標

   ▪默認的參數模式使In參數

   ▪當過程結束時,實參的值不會改變

 

2.out參數(只寫參數)

   ▪當過程被調用時,實參的值將忽略不計,不能傳給形參

   ▪形參的作用相當於沒有被初始化的PL/SQL變量,其值為NULL,形參的值可以在過程中被修改

   ▪實參必須是變量

   ▪當過程結束時將形參的內容賦給實參

 

SQL> create procedure count_emp
  2  (v_deptno dept.deptno%type,v_count out number)
  3  as
  4  begin
  5   select count(*) into v_count from emp group by deptno having deptno=v_deptno;
  6   dbms_output.put_line('部門'||v_deptno||''||v_count||'個雇員');
  7  end count_emp;
  8  /

過程已創建。

調用方式:

方法1:
SQL> variable v_count number;
SQL> exec count_emp(10,:v_count);
部門10有3個雇員

PL/SQL 過程已成功完成。

方法2:
SQL> declare
  2   v_count number;
  3  begin
  4   count_emp(10,v_count);
  5  end;
  6  /
部門10有3個雇員

PL/SQL 過程已成功完成。

 

3.in out參數(可讀寫參數)

   ▪形參可以讀取,也可以寫入,過程調用時,將實參的值傳入給形參,過程結束后,又將形參的值賦給實參

   ▪形參和實參都必須是變量

 

4.形參不需要對數據類型進行約束,約束來自於實參

5.形參的默認值,只有In參數有默認值

 

SQL> create or replace procedure p_emp
  2  (v_id in number default 4)
  3  as
  4  begin
  5   insert into emp(ename,empno) values('林慧',v_id);
  6  end;
  7  /

過程已創建。

 

 

SQL> create or replace procedure p_emp
  2  (v_id out number default 4)
  3  as
  4  begin
  5   insert into emp(ename,empno) values('林慧',v_id);
  6  end;
  7  /

警告: 創建的過程帶有編譯錯誤。

SQL> show error
PROCEDURE P_EMP 出現錯誤:

LINE/COL ERROR
-------- -----------------------------------------------------------------
2/2      PLS-00230: OUT 和 IN OUT 的形參不能有默認表達式

6.實參和形參的匹配辦法

   ▪位置表示法:依靠位置順序來標識

   ▪命名表示法:使用‘=>’來標識,即:形參名=>實參名(實參值)

begin
  -- 位置表示法
  p_param_default('Good ', 'morning', 1, sysdate+1);
  -- 命名表示法
  p_param_default(param1 => 'Good',param4=>sysdate+1);
  -- 混合表示法
  p_param_default('Good', param4 => sysdate + 1);
End;

注意:一般情況下,定義過程時,建議沒有默認值的in參數放在參數列表的開始位置,其后是out參數,然后是in out參數,最后是有默認值的in參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM