------------------------------------------------存储过程 begin---------------------------------
27. 定义一个存储过程: 获取给定部门的工资总和(通过 out 参数), 要求, 部门号和工资总额定义为参数
create or replace procedure sum_sal_procedure(dept_id number, v_sum_sal out number) is cursor sal_cursor is select salary from employees where department_id = dept_id; begin v_sum_sal := 0; for c in sal_cursor loop --dbms_output.put_line(c.salary); v_sum_sal := v_sum_sal + c.salary; end loop; dbms_output.put_line('sum salary: ' || v_sum_sal); end;
28. 自定义一个存储过程完成以下操作:
对给定部门(作为输入参数)的员工进行加薪操作, 若其到公司的时间在 ? -- 95 期间, 为其加薪 %5
95 -- 98 %3
98 -- ? %1
得到以下返回结果: 为此次加薪公司每月需要额外付出多少成本(定义一个 OUT 型的输出参数).
create or replace procedure add_sal_procedure(dept_id number, temp out number) is cursor sal_cursor is select employee_id id, hire_date hd, salary sal from employees where department_id = dept_id; a number(4, 2) := 0; begin temp := 0; for c in sal_cursor loop a := 0; if c.hd < to_date('1995-1-1', 'yyyy-mm-dd') then a := 0.05; elsif c.hd < to_date('1998-1-1', 'yyyy-mm-dd') then a := 0.03; else a := 0.01; end if; temp := temp + c.sal * a; update employees set salary = salary * (1 + a) where employee_id = c.id; end loop; end;
------------------------------------------------存储过程 end---------------------------------