SQL插入触发器是否干净地访问旧值?
除了基本的查询/插入之外,我还不熟悉SQL(进一步阅读后您会很快看到) 这里有一个(非常)简化的例子 我有一张“个人”表,如:SQL插入触发器是否干净地访问旧值?,sql,Sql,除了基本的查询/插入之外,我还不熟悉SQL(进一步阅读后您会很快看到) 这里有一个(非常)简化的例子 我有一张“个人”表,如: UID | NAME | AGE | LOCATION 45 | bob | 23 | Canada 31 | bill | 20 | Romania 第二张表是“个人历史”,如: UID | PID | NAME | AGE | LOCATION - | - | - | - | - 当我像这样插入到这个表中时 upd
UID | NAME | AGE | LOCATION
45 | bob | 23 | Canada
31 | bill | 20 | Romania
第二张表是“个人历史”,如:
UID | PID | NAME | AGE | LOCATION
- | - | - | - | -
当我像这样插入到这个表中时
update person set age=10 where UID==45
我希望触发触发器,亲自访问现有值,并将它们推送到第二个表中,然后继续原始插入
我认为这样做的方式是:
Select uid, name, age, location,
into v_uid, v_name, v_age, v_location
from person
where uid = :new.uid
然后像这样插入
Insert into person_history(UID, PID, NAME, AGE, LOCATION)
VALUES (sequence.nextval, v_uid, v_name, v_age, v_location);
但这似乎是一种非常迂回的方法,尤其是当表有50列时
这是正确的方法吗?有没有更优雅的方法来解决这个问题
再一次,请记住我对这一切是多么的陌生,所以举个例子会很有帮助 你为什么要做这部分
Select uid, name, age, location,
into v_uid, v_name, v_age, v_location
from person
where uid = :new.uid
只要使用这种方法:
INSERT INTO person_history(UID, PID, NAME, AGE, LOCATION)
VALUES (sequence.nextval, ::new.uid, ::new.name, ::new.age, ::new.location);
关于列的数量,我不确定是否有可能以“更智能”的方式进行操作。您使用什么数据库管理系统?总的来说,我认为你的方法非常好。如果您担心枚举列,我会重新考虑是否真的有必要在历史记录中包含所有列。