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;