除了基本的查询/插入之外,我是SQL的新手(因为当你进一步阅读时,你会很快看到)
这是一个(非常)简化的例子。
我有桌子' person'喜欢:
UID | NAME | AGE | LOCATION
45 | bob | 23 | Canada
31 | bill | 20 | Romania
和第二张表#person_history'喜欢:
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列。
这是正确的方法,是否有更优雅的方法来解决这个问题。
再次,请记住我对所有这些都有多新,所以这些例子会非常有用。
答案 0 :(得分:0)
为什么要这样做?:
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);
关于列的数量,我不确定是否可以在更聪明的情况下进行操作"方式。