【问题标题】:Package for Insert/Update old salary value in emp_sal_history table whenever salary get changed without trigger每当工资在没有触发器的情况下更改时,用于在 emp_sal_history 表中插入/更新旧工资值的包
【发布时间】:2015-06-19 13:37:51
【问题描述】:

这是我的功能

create or replace
function sal_incr
(
p_grade number)
return number
is
v_inc number;
begin
select raise_percent into v_inc from sal_inc where grade_id = p_grade;
return  1 + (v_inc/100);
end;

这是我的程序:

create or replace 
procedure sal_increm 
is
begin
UPDATE emp_task SET sal = sal * sal_incr(grade_id);
end;

如何做那个包.. 不使用触发器如何在单独的表中更新“旧萨尔”、“修改者”和“修改者”

【问题讨论】:

  • 这项工作是否有效 UPDATE emp_task SET sal = sal * sal_incr(grade_id), modified_by = USER,modified_on = sysdate where emp = emp_id: ??

标签: oracle function package procedure


【解决方案1】:

一个过程中可以有多个 DML 语句;如果你不能,它们的用处就会减少。您可以根据任务表中的数据对历史表进行单次插入,将执行用户添加到the USER function,将当前时间添加到SYSDATE

create or replace 
procedure sal_increm 
is
begin
  insert into emp_sal_history (empno, old_sal, modified_by, modified_on)
  select empno, sal, user, sysdate
  from emp_task;

  update emp_task set sal = sal * sal_incr(grade_id);
end;
/

如果你也想记录新的工资,你也可以在插入中计算。

这将记录历史记录,即使对于成绩没有增加的员工也是如此。如果您有这些或想要处理这种可能性并排除它们,您可以添加

where sal_incr(grade_id) != 1

您也可以将其添加到更新中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多