2017-08-30 73 views
0
触发

请帮我解决以下问题在Oracle中创建

我需要创建一个名为trigger_contact_af_update每当“接触”表被更新时被触发扳机。此触发器将在更新联系人详细信息后将org_name和操作插入表contact_log_history。受影响日志表contact_log_history中的操作名称为After_Update_Contact

提示: 触发器名称:trigger_contact_af_update 表名:contact_log_history 字段名:ORG_NAME,动作 行动: 'After_Update_Contact'。

contact_log_history的表结构如下: ORG_NAME VARCHAR(30) 动作VARCHAR(30)

接触的表结构如下:

id为接触表中的主键

ID整数 ORG_NAME VARCHAR2(255) street_address1 VARCHAR2(255) street_address2 VARCHAR2(255) 城市VARCHAR2(255) 状态VARCHAR2(255) POSTAL_CODE VARCHAR2(255) COUNTRY_CODE VARCHAR2(255) 姓氏VARCHAR2(255) 名字VARCHAR2(255) person_title VARCHAR2(255) phone_country_code整数 phone_area_code整数 PHONE_NUMBER VARCHAR2(255) 电子邮件varchar2(255) created_time timestamp

我已经创建了如下的触发器,但是在执行时不会返回任何错误消息也不会创建触发器。请让我知道创建触发器时的错误/正确的语句

CREATE OR REPLACE TRIGGER trigger_contact_af_update 
AFTER UPDATE 
    ON contact 
FOR EACH ROW 
DECLARE 
BEGIN 
INSERT INTO contact_log_history 
    (org_name, 
    action) 
select org_name, 'contact_log_history' 
from contact 
END; 
+2

为什么你不只使用新的更新值 – Vecchiasignora

+0

@Stephia你使用的是哪个版本的Oracle?你如何检查触发器是否被创建?您是否尝试运行此选择语句:'select * from user_triggers where trigger_name ='TRIGGER_CONTACT_AF_UPDATE''? –

+0

@Stephia你如何运行你的'Create Trigger'语句?你使用哪个软件? –

回答

2

为什么你不使用新的更新值? 您可以将只更新新的价值:new.org_name,这样

CREATE OR REPLACE TRIGGER trigger_contact_af_update AFTER UPDATE ON contact FOR EACH ROW 
DECLARE 
BEGIN 
INSERT INTO contact_log_history (org_name, action) values (:new.org_name, 'contact_log_history'); 
END; 
0

您必须使用:new关键字。此外,您必须在insert声明的末尾添加;。触发器的修正版本是:

CREATE OR REPLACE TRIGGER trigger_contact_af_update 
AFTER UPDATE 
    ON contact 
FOR EACH ROW 
DECLARE 
BEGIN 
    INSERT INTO contact_log_history 
     (org_name, action) 
    VALUES 
     (:new.org_name, 'contact_log_history'); 
END; 
+1

'select from dual '在这种情况下是多余的 – ShoeLace

+0

@ShoeLace你是对的。我更新了我的答案。 –

+0

试过下面 CREATE OR REPLACE TRIGGER trigger_contact_af_update UPDATE 后接触 FOR EACH ROW DECLARE BEGIN INSERT INTO contact_log_history (ORG_NAME,动作) VALUES (:new.org_name, 'contact_log_history'); END; 但触发器没有创建..是否有任何其他语法 – Stephia