插入和更新时的Sybase表审核触发器

时间:2015-06-09 22:03:28

标签: sybase sybase-ase

我在oracle中创建了一个表审计触发器,我很难将其用于Sybase。我有两个表(一个基表和一个审计表),我正在寻找的是一个触发器,它的功能就是这样。

  • 如果将新记录插入基表,则将全新记录从基表复制到审计表中,同时插入日期,输入记录的用户以及显示“新记录”的注释
  • 在基表中更新了记录,基表中的完整记录被插入到审计表中,除了具有新值的更新列(加上注释为“更新记录”)

以下是我在Oracle中创建的示例:

CREATE TABLE baseTable
(
col1 int,
col2 varchar2(10),
col3 varchar2(50),
chg_date DATE,
chg_usr varchar(10),
PRIMARY KEY(col1)
);

CREATE TABLE auditTable
(
aud_id int,
col1 int,
col2 varchar2(10),
col3 varchar2(50),
chg_typ varchar(100)
chg_date DATE,
chg_usr varchar(30),
PRIMARY KEY (aud_id)
);

CREATE OR REPLACE TRIGGER auditBaseTable
AFTER INSERT OR UPDATE ON baseTable
FOR EACH ROW
BEGIN

IF INSERTING THEN
INSERT INTO auditTable (aud_id, col1, col2, col3, chg_typ, chg_date, chg_usr)
VALUES(seq.NEXTVAL, :NEW.col1, :NEW.col2, :NEW.col3, "New Record", SYSDATE, :NEW.chg_usr);

ELSEIF UPDATING ('col2') THEN --col1 is PK hence cannot be updated
INSERT INTO auditTable (aud_id, col1, col2, col3, chg_typ, chg_date, chg_usr)
VALUES(seq.NEXTVAL, :OLD.col1, :NEW.col2, :OLD.col3, "Col2 Updated", SYSDATE, :NEW.chg_usr);
...
...

ENDIF;
END;

我已经明白Sybase无法使用'AFTER'来执行触发器。

即使您能让我走上正轨,我们也将非常感谢您提供的任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以创建触发器 用于插入,更新,删除 无需担心之前或之后

语法: 在table_name上创建触发器trigger_name以进行更新,插入,删除 <>