创建触发器以在更新表后插入

时间:2018-07-01 16:03:45

标签: oracle triggers

创建一个名为trigger_contact_af_update的触发器,该触发器将在contact表更新时触发。更新联系人详细信息后,此触发器将把org_name和操作插入表contact_log_history中。受影响的日志表contact_log_history中的操作名称为'After_Update_Contact'

提示:

  • 触发器名称:trigger_contact_af_update
  • 表名:contact_log_history
  • 字段名称:org_name,操作
  • 操作:“更新后的联系人”。

contact_log_history的表结构如下:

org_name Varchar(30)
action Varchar(30)

我编写了以下触发器,但未创建错误或触发器。

CREATE OR REPLACE TRIGGER trigger_contact_af_update AFTER UPDATE 
    ON contact_log_history FOR EACH ROW 
DECLARE 
    org_name VARCHAR(30);
    action VARCHAR(30);
BEGIN 
    if (:new.action == 'After_Update_Contact') 
    then 
        INSERT INTO contact_log_history (org_name, action) 
        values (:new.org_name, :new:action);
    end if ;
END;

2 个答案:

答案 0 :(得分:0)

您应该使用

SHOW ERRORS 

select * from user_errors;

在编译过程中检查过程/功能/触发器的错误。

在解决问题并避免使用变量之后,这是一个有效的触发器。

CREATE  OR replace TRIGGER contact_af_update AFTER 
UPDATE 
ON contact FOR EACH ROW 
DECLARE 
BEGIN 
  IF (:new.action = 'After_Update_Contact') THEN 
    INSERT INTO contact_log_history 
                ( 
                            org_name, 
                            action 
                ) 
                VALUES 
                ( 
                            :new.org_name, 
                            :new.action 
                ); 

  END IF ; 
END;
/

Demo

答案 1 :(得分:0)

试试这个:

CREATE  OR replace TRIGGER trigger_contact_af_update AFTER 
UPDATE 
ON contact FOR EACH ROW 

BEGIN 
 
    INSERT INTO contact_log_history 
                ( 
                            org_name, 
                            action 
                ) 
                VALUES 
                ( 
                            :new.org_name, 
                            'After_Update_Contact' 
                ); 

  
END trigger_contact_af_update;
/