让我们说这是我们的价格表
curP | oldP | ID
+------------------+
|210 | null | 1 |
+------------------+
我想在做的时候创建一个触发器:
UPDATE PRICES
SET curP = 300
WHERE ID = 1;
它会像我这样显示我们的表:
curP | oldP | ID
+------------------+
|300 | 210 | 1 |
+------------------+
触发器的外观如何?我只想将旧值复制到新列中。请帮忙(我在Oracle工作) *编辑:每当我试图制作一个触发器时,它会给出一个错误,即表正在变异......
答案 0 :(得分:2)
您可以使用BEFORE UPDATE
行级TRIGGER
执行此操作。这是一个例子:
首先创建表格:
CREATE TABLE PRICES(CURP NUMBER, OLDP NUMBER, ID NUMBER);
然后创建触发器:
CREATE OR REPLACE TRIGGER CURP_TO_OLDP
BEFORE UPDATE ON PRICES
FOR EACH ROW
BEGIN
:NEW.OLDP := :OLD.CURP;
END;
/
然后测试它。首先添加一些初始数据:
INSERT INTO PRICES VALUES (100,NULL,1);
INSERT INTO PRICES VALUES (200,NULL,2);
SELECT * FROM PRICES ORDER BY 3;
CURP OLDP ID
100 1
200 2
然后更新:
UPDATE PRICES SET CURP = 1000;
SELECT * FROM PRICES ORDER BY 3;
CURP OLDP ID
1000 100 1
1000 200 2
答案 1 :(得分:0)
如果您在更新时的代码中有一个点,则可以在没有触发器的更新语句中执行此操作
update prices
set oldp = curp, curp = newvalue
where id = yourid