我有类似的要求,如下所示
表名:Salary_detail(至少有10,00,000条记录)
列
薪水 - 数字
加息 - 号码
net_salary - > cal_netsal(工资,上调)
(cal_netsal是计算net_sal的函数)
total_sal ---> total_sal(工资,上调)
total_sal是一个函数
previous_sal - > previous_sal(工资,上调)
previous_sal是一个函数。
我需要计算net_salary,total_sal和previous_sal列
1.我需要计算一行中的所有三列
2.插回该表中的相应列。 什么是达到这个目标的最好方法?
请帮助
答案 0 :(得分:1)
您可以使用已创建的功能轻松更新现有列。以下更新将处理表中的现有记录。
UPDATE salary_details
SET net_salary = cal_netsal (salary, hike)
, total_sal = total_sal (salary, hike)
, previous_sal = previous_sal (salary, hike) WHERE 1 = 1
如果在表中插入或更新了新记录,则可以创建一个插入前触发器,它将更新现有列,并且无需在每次创建触发器后手动执行此操作。触发器将处理DML操作发生在表上
CREATE OR REPLACE TRIGGER sal_biu_trg
BEFORE INSERT OR UPDATE ON salary_details
FOR EACH ROW
BEGIN
IF INSERTING OR UPDATING THEN
:NEW.net_salary = cal_netsal (:NEW.salary,:NEW.hike);
:NEW.total_sal = total_sal (:NEW.salary,:NEW.hike);
:NEW.previous_sal = previous_sal (:NEW.salary,:NEW.hike);
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
/