SQL触发器,如何在更新第一列时将值从一列复制到另一列

时间:2017-04-23 14:56:42

标签: sql oracle triggers

让我们说这是我们的价格表

 curP |  oldP | ID 
+------------------+
|210  | null  |  1 |
+------------------+

我想在做的时候创建一个触发器:

UPDATE PRICES
SET curP = 300
WHERE ID = 1;

它会像我这样显示我们的表:

 curP |  oldP | ID 
+------------------+
|300  | 210   |  1 |
+------------------+

触发器的外观如何?我只想将旧值复制到新列中。请帮忙(我在Oracle工作) *编辑:每当我试图制作一个触发器时,它会给出一个错误,即表正在变异......

2 个答案:

答案 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