过程

3.过程
 过程可以封装对数据表增删改查操作。
 需要对表增删改操作时,需要使用
过程(存储过程)。
create or replace procedure 过程名
(参数名 类型)
is
--变量定义
begin
--主处理
exception
--异常处理
end;
 
案例:编写一个存储过程,按给定员工
编号和增加工资额涨薪。
create or replace
procedure add_sal_pro
(v_empno number,v_sal number)
is
begin
  update emp set sal=sal+v_sal
  where empno=v_empno;
  commit;
end;
/
调用方法:call 过程名(参数值);
 
案例:带返回值的过程
 传入两个整数a和b,
返回(a+b)+(a*b)+(a-b)+(a/b)表达式值
 
create or replace procedure mypro1
(a number,b number,c out number)
is
begin
  c := (a+b)+(a*b)+(a-b)+(a/b);
end;
/
测试:
declare
 r number;
begin
  mypro1(5,2,r);
  dbms_output.put_line(r);
end;
 
 
过程参数定义格式:
变量名 IN|OUT 类型
IN接收传入的常量值;
OUT给一个变量值,把返回结果带出去
 
 
案例:采用过程重构昨天根据emp生成
纳税表emp_tax记录案例
 
create or replace procedure emp_tax_pro
is
 CURSOR c_emp IS select * from emp;
 v_emp emp%ROWTYPE;--记录变量,保存一行员工信息
 v_total emp.sal%TYPE;--工资总额
 v_tax_sal emp.sal%TYPE;--交税工资
 v_tax emp.sal%TYPE;--交税金额
begin
  OPEN c_emp;
  LOOP
  --循环取出EMP表每一行员工记录
    fetch c_emp into v_emp;
    exit when c_emp%NOTFOUND;
  --计算员工应交税金额TAX
    v_total := v_emp.sal+NVL(v_emp.comm,0);
  --调用get_tax()函数根据工资总额v_total计算
    v_tax := get_tax(v_total);
  --将EMP_TAX所需的字段值写入INSERT
    insert into EMP_TAX(id,empno,
     ename,sal,tax,tax_date)
    values(tax_seq.nextval,v_emp.empno,
     v_emp.ename,v_total,v_tax,sysdate);
  END LOOP;
  CLOSE c_emp;
  commit;--提交操作
end;
/
原文地址:https://www.cnblogs.com/yunman/p/5497813.html