代码之家  ›  专栏  ›  技术社区  ›  Lodi

PL/SQL触发器-保存更新列的日志,如何设置insert的PK

  •  1
  • Lodi  · 技术社区  · 8 年前

    我试图编写一个触发器,当某个表的某一列被更新时,该触发器记录该表的旧值。

    CREATE OR REPLACE TRIGGER log_valor_produto
    AFTER UPDATE OF VALOR_VENDA ON PRODUTO 
    FOR EACH ROW
    BEGIN
      INSERT INTO PRODUTO_HISTORICO (IDPRODUTO, DATA_ALTERACAO, VALOR_ANTERIOR, USUARIO) 
      VALUES (:OLD.IDPRODUTO, SYSDATE, :OLD.VALOR_VENDA, USER);
    END;
    /
    

    (目前,我无法测试此代码,很遗憾……)

    1 回复  |  直到 8 年前
        1
  •  1
  •   Littlefoot    8 年前

    哪个列(在PRODUTO\u HISTORICO表中)是主键?

    除非你手动处理(通过触发器)或者-如果你在12c上-创建了一个 列-没有“自动”执行任何操作。

    CREATE SEQUENCE seq_historico;
    
    CREATE OR REPLACE TRIGGER log_valor_produto
       AFTER UPDATE OF valor_venda
       ON produto
       FOR EACH ROW
    BEGIN
       INSERT INTO produto_historico (primary_key_column,     --> I added this ...
                                      idproduto,
                                      data_alteracao,
                                      valor_anterior,
                                      usuario)
            VALUES (seq_historico.NEXTVAL,                    --> ... and this
                    :old.idproduto,
                    SYSDATE,
                    :old.valor_venda,
                    USER);
    END;