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;
/