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

 

posted @ 2017-11-01 15:12  陆伟  阅读(19963)  评论(0编辑  收藏  举报