存儲過程中的in out in out 三種類型的參數


in 是參數的默認模式,這種模式就是在程序運行的時候已經具有值,在程序體中值不會改變。

out模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳遞回調用他的過程

in out 表示高參數可以向該過程中傳遞值,也可以將某個值傳出去

一:在函數中:

 

CREATE OR REPLACE FUNCTION get_salary(
    Dept_no NUMBER,
    Emp_count OUT NUMBER)
  RETURN NUMBER
  IS
    V_sum NUMBER;
  BEGIN
 SELECT SUM(SAL), count(*) INTO V_sum, Emp_count
 FROM EMP WHERE DEPTNO=dept_no;
 RETURN V_sum;
 EXCEPTION
 WHEN NO_DATA_FOUND THEN
       DBMS_OUTPUT.PUT_LINE('你需要的數據不存在!');
 WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
 END;

 

調用:

DECLARE 
   V_num NUMBER; 
   V_sum NUMBER; 
 BEGIN 
   V_sum :=get_salary(10, v_num); 
   DBMS_OUTPUT.PUT_LINE('部門號為:10的工資總和:'||v_sum||',人數為:'||v_num); 
 END;
Dept_no參數可以直接輸入。
Emp_count OUT NUMBER   參數因為是out。所以先要聲明一個變量V_num。因為函數有一個return返回。out返回的時候。直接寫里面執行不了。所以定義一個變量V_sum用來接收get_salary函數的
返回值。
二:過程:
create or replace procedure pro_demo_p1(  
           p_one in varchar2,--可以傳入參數  
           p_two out varchar2,--可以返回值  
           p_three in out varchar2--既可以傳入參數,也可以返回值  
    ) is  
    begin  
      dbms_output.put_line('參數:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
   end;

調用:

DECLARE
      TWO VARCHAR2(20):='LI';
      THREE VARCHAR2(20):='BAI';
    begin
      pro_demo_p1('one',TWO,THREE);
      end;

p_two明明賦予了值。沒有輸出出來。因為是out。

 使p_two輸出值。定義一個變量TWOA。然后賦給p_two。

create or replace procedure pro_demo_p1(
           p_one in varchar2,--可以傳入參數
           p_two out varchar2,--可以返回值
           p_three in out varchar2--既可以傳入參數,也可以返回值
    ) is
    
    TWOA VARCHAR2(20) :='LI';
    begin
      p_two:=TWOA;   --TWOA變量賦值給p_two參數。
      dbms_output.put_line('參數:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);
      
   end;

調用:

DECLARE
  TWO VARCHAR2(20);--定義這兩個變量作為pro_demo_p1的參數傳進去
  P_THREE VARCHAR2(20):='BAI';
BEGIN 
  pro_demo_p1('A',TWO,P_THREE);
  END;

 


免責聲明!

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



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