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参数

 

posted @ 2017-10-17 20:07  Queenayao  阅读(7315)  评论(0编辑  收藏  举报