2017-08-30 70 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