2015-12-08 38 views
0

我正在嘗試執行此操作。它給我錯誤的MySQL語法。無法弄清楚爲什麼。運行SQL觸發器時​​出錯

CREATE TRIGGER trig1 
AFTER INSERT OR UPDATE ON table1 
FOR EACH ROW 
INSERT INTO table2 (id,entity_type,`data`,processed,created_at,last_updated_at) 
VALUES (DEFAULT , 'campaigns', 
'{"campaign_id":"' CONCAT NEW.campaign_id CONCAT '","name":"' CONCAT NEW.name CONCAT '","advertiser_id":"' CONCAT NEW.advertiser_id CONCAT '","start_date":"' CONCAT NEW.start_date 
CONCAT '","end_date":"' CONCAT NEW.end_date CONCAT '","status":"' CONCAT NEW.status CONCAT '","pacing":"' CONCAT NEW.pacing CONCAT '","budget_value":"' CONCAT NEW.budget_value 
CONCAT '","gross_budget":"' CONCAT NEW.gross_budget CONCAT '"}' , 
0, CURRENT_TIMESTAMP , CURRENT_TIMESTAMP) ; 
+0

需要用'分隔符使用$$'和'結束$$''..分隔符;'周圍 – amdixon

回答

1

你已經在聲明中使用不當CONCAT

應該如下圖所示的語句:

VALUES (DEFAULT , 'campaigns', 
CONCAT('{"campaign_id":"', NEW.campaign_id, 
     '","name":"', NEW.name, 
     '","advertiser_id":"', NEW.advertiser_id, 
     '","start_date":"', NEW.start_date, 
     '","end_date":"', NEW.end_date, 
     '","status":"', NEW.status, 
     '","pacing":"', NEW.pacing, 
     '","budget_value":"', NEW.budget_value, 
     '","gross_budget":"', NEW.gross_budget, 
     '"}'), 
0, CURRENT_TIMESTAMP , CURRENT_TIMESTAMP) ; 

參考文檔

+0

還告訴我一兩件事,我不能夠在同一同時使用INSERT和UPDATE時間。任何具體原因。現在我用'插入表1'後 – rocker

+0

'INSERT'和'UPDATE'是兩個不同的事件。他們的觸發器是獨立的。你不能將他們兩個作爲一個*事件* –

1

有你的觸發一些問題,我將開始與這樣的修正:

CREATE TRIGGER trig1 
AFTER INSERT ON table1 
FOR EACH ROW 
INSERT INTO table2 (entity_type,`data`,processed,created_at,last_updated_at) 
VALUES (
    'campaigns', 
    CONCAT(
    '{', 
    CONCAT_WS(
     ',', 
     CONCAT('"campaign_id":"', NEW.campaign_id, '"'), 
     CONCAT('"name":"', NEW.name, '"'), 
     CONCAT('"status":"', NEW.status, '"'), 
    ), 
    '}' 
), 
    0, 
    CURRENT_TIMESTAMP, 
    CURRENT_TIMESTAMP 
); 

CONCAT將Concat的與值和收盤}開幕{

的所有值都使用,將創建分隔值的字符串逗號CONCAT_WS來計算,它會忽略空值。

這將使觸發更具可讀性。