我这里有一个有趣的问题,可能有人可以帮助我。我有一个大多数使用整数的表/表格,偶尔会用一批新数字进行更新。触发器将所有旧数字传递给设计完全相同的第二张表,因为旧数字对于保持一定时间很重要。触发器如下所示:

begin

if NEW.(rowname)<>OLD.(rowname) then
update table2
set table2.rowname = OLD.rowname
where table2.id = OLD.ID;
end if;
 ...
end


这段代码适用于这些类型中的100多个行。
现在,受托手动输入新数字的人很容易出错,而返回更新表格以更改其错误将不可避免地将错误的数字传递给第二张表(实际上有5张表要保留5代数集)。因此,我认为可能有一种方法可以在表中包括一个timestamp字段,并使用初始的“ IF / THEN”语句禁用触发器,该语句将时间戳记合并到SUBMIT之后创建一个时间间隔,以便在不进行更正的情况下进行更正。让触发器实际触发。这可能吗?

最佳答案

我会出于好奇@drew进行调查,但是我的结论/解决方案将涉及触发器定义中语义的轻微变化。这些行是4位数的温度,触发器将简单地定义为:当所有新读数与旧读数不同时,旧读数将传递到下一个表,依此类推。 “ IF”和“ END IF”语句将包围引用所有行的所有语句。因此,如果旧行数字是2500,则新行将简单地输入为2501,并且使用临时读数的仪器的微小偏差将落在误差范围之内。这样,任何更改都可以在主表上进行,除非它是完全更改,除非它不影响归档表。一个实用的,不太优雅的解决方案,因为它忽略了SQL语言的复杂性和欣赏性,而我对此并不十分熟悉。
我很幸运,这里允许有一定的误差。感谢你们俩的投入...

新的触发器:

begin
if
NEW.row1<>OLD.row1 then
update table2
set table2.row1 = OLD.row1
where table.id = OLD.ID;
and
(if?) NEW.row2<>OLD.row2 then
update table2
set table2.row2 = OLD.row2
where table2.id = OLD.ID;
.....
end if;
end


我希望从语义上讲答案是可行的,如果没有,我会弄清楚细节,直到它起作用为止。

10-07 19:38
查看更多