存储过程中的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;