oracle过程

过程一般用于执行一个指定的操作,可以将常用的特定操作封装成过程

格式:create or replace procedure  过程名  (argument1 [mode1] datatype1, argument2 [mode2] datatype2, ...)

           is[as]   声明部分

            begin   执行部分

            exception    异常处理部分

           end;

对于过程调用有三种方式:

  • call  过程名();
  • exec 过程名;
  • begin
        过程名;
    end;

对于前两种区别在于:第一可以带参数,第二不可以;

过程分为有参和无参两种;

无参相对比较简单,

例如:创建一个无参过程,将每位员工工资上涨1000元

CREATE or replace procedure pro_emp as
begin
	update emp set sal=sal+1000;
end;

调用我们有三种方法

--方法一
 call pro_emp;
--方法二
  exec pro_emp;
--方法三
begin
	pro_emp;
end;

有参相对比较难一点;

  1. 带有IN参数  :当为过程定义参数时,如果不指定参数模式,则默认为输入参数, in可以省略
  2. 带有OUT参数  :过程不仅可以用于执行特定操作,还可以用于输出数据
  3. 带有IN OUT参数 :称为输入输出参数

例如:根据输入的员工编号输出该员工的工资

--1,in输入参数
create or replace procedure pro_empno_sal(v_empno in emp.empno%type)
as v_sal emp.sal%type;
begin
  select sal into v_sal from emp where empno=v_empno;
  dbms_output.put_line('该员工的工资为:'||v_sal);
exception
    when no_data_found then
    dbms_output.put_line('没有找到该员工');
end;

/*执行*/
call pro_empno_sal(7369);




--2,out输出参数
create or replace procedure pro_fanhui_sal(v_empno in emp.empno%type , v_sal out emp.sal%type)
is
begin
  select sal into v_sal from emp where empno= v_empno;
exception
    when no_data_found then
    dbms_output.put_line('没有找到该员工');
end;
/*执行*/
declare
    v_sal emp.sal%type;
begin
  pro_fanhui_sal(&no,v_sal);
  dbms_output.put_line('该员工的工资为:'||v_sal);
end;




--3,in out 输入输出参数
create or replace procedure pro_inout_sal(param_num in out number)
as
begin
select sal into param_num from emp where empno=param_num;
dbms_output.put_line('该员工的工资为:'||param_num);
exception
    when no_data_found then
    dbms_output.put_line('没有找到该员工');
end;
/*执行*/
declare
inout_num number:=&no;
begin
  pro_inout_sal(inout_num);
end;


注:&no 是由键盘输入;

最后对于过程还有多参传递

  1. 位置传递 :按位置传递是指在调用时按参数的排列顺序依次写出实参的名称,将形参与实参关联起来进行传递
    Eg: call pro_dept(80,'科研部','郑州');
  2. 名称传递 :按名称传递是指在调用时按照形参与实参的名称写出实参所对应的形参,将形参与实参关联起来进行传递
    Eg:call pro_emp(v_deptno=>80,v_loc=>'郑州',v_dname=>'科研部');
  3. 组合传递 :可以将按位置传递、按名称传递两种方法在同一调用中混合使用
    Eg:call pro_emp(80,v_loc=>'郑州',v_dname=>'科研部');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值