CREATE DEFINER=`root`@`localhost` TRIGGER `TRIGGERNAME` AFTER UPDATE ON `employee` FOR EACH ROW
BEGIN
SET employee.da = employee.basic*(5.0/100)
SET employee.gross = employee.basic + (employee.basic*(5.0/100))
END
alter table employee drop (da, gross);
alter table employee add (
da generated always as base * 0.05 virtual
, gross generated always as base * 1.05 virtual
);
3条答案
按热度按时间qni6mghb1#
PL/SQL
标记建议您使用oracle数据库。你说还有一张table,
sal_hist
,但是-你没说怎么处理。我想你应该把原来的基本工资存起来。在这种情况下,触发器如下所示:
让我们看看它是如何工作的:
wd2eg0qa2#
lxkprmvk3#
定义da和gross的方法是直接从基中导出的。但是作为一个标准列,我可以直接更新它们中的任何一个。如果不需要这样做,那么可以将它们声明为虚拟列。
现在这两个列都不能单独更新,并且在更新base时都会自动更新。将它们用作select的普通列,但在insert或update中不引用then。而且不需要触发器。
看小提琴。注意:您没有指定您使用的oracle版本。这需要11gr1或更高。