【问题标题】:Create trigger to insert After Update the table创建触发器以在更新表后插入
【发布时间】:2018-12-10 00:22:57
【问题描述】:

创建一个名为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,action
  • 操作:“After_Update_Contact”。

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;

【问题讨论】:

  • 您的作业说要跟踪contact 表中的更改,但由于某种原因,您已经在contact_log_history 上构建了触发器。如果你把它建在正确的桌子上,你可能会获得更大的成功。
  • 并将双方程 (==) 替换为 :new.action == 'After_Update_Contact' 的单方程 (=)
  • 尝试了以下方法,但仍未创建触发器。创建或替换触发器 contact_af_update 更新后的联系人为每一行声明 org_name VARCHAR(30);行动 VARCHAR(30); BEGIN if (:new.action = 'After_Update_Contact') then INSERT INTO contact_log_history (org_name, action) values (:new.org_name, :new:action);万一 ;结束;
  • 请检查我的回答并接受它是否对您有帮助或为给定的解决方案提供相关反馈(cmets)。请阅读:stackoverflow.com/help/someone-answers 了解为什么它很重要。

标签: oracle triggers


【解决方案1】:

你应该使用

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

【讨论】:

    【解决方案2】:

    试试这个:

    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;
    /
    

    【讨论】:

    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2022-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多