2016-02-12 46 views
1

我有這個SQL代碼的問題。我想創建一個觸發器,在這裏。mysql錯誤,正確的語法使用附近''

CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent` 

FOR EACH ROW 
BEGIN  
DECLARE costvalue INTEGER default 0; 

IF (OLD.PacketStatusType_Id!=NEW.PacketStatusType_Id) THEN 

     IF (OLD.Packet_Cost IS NULL) THEN 
      SET costvalue = OLD.Packet_Cost; 
     ELSE 
      SET costvalue = OLD.Packet_SMSCount; 
     END IF; 

      IF (costvalue IS NOT NULL) THEN 
       CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,costvalue,-1); 
      ELSE 
       CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,0,-1); 
      END IF; 


     DECLARE COST_VALUE_NEW INT DEFAULT 0; 

     IF (NEW.Packet_Cost IS NULL) THEN 
      SET COST_VALUE_NEW = NEW.Packet_Cost; 
     ELSE 
      SET COST_VALUE_NEW = NEW.Packet_SMSCount; 
     END IF; 

      IF (COST_VALUE_NEW IS NOT NULL) THEN 
       CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,COST_VALUE_NEW,1); 
      ELSE 
       CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,0,1); 
      END IF; 

     ELSE 



     END IF; 

    END IF; 
END  

但我明白了這一點;

錯誤

SQL查詢:

CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent` FOR EACH ROW BEGIN DECLARE costvalue INTEGER default 0; 

MySQL表示:文件>#1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法手冊使用 附近'撇號的第5行

這條線是 我試着刪除空格,由組合(」和'),刪除,手動重寫某些行但不能使其工作,此代碼有什麼問題?

+0

我在觸發器定義之前看不到分隔符命令。你使用它了嗎? – Shadow

+0

不,我沒有使用它,我必須嗎? –

回答

1

您需要和create trigger命令後使用delimiter命令,否則分號終止觸發器主體中的命令會混淆的MySQL。請參閱mysql的文檔defining stored programs,其中還有示例如何使用delimiter命令。

+0

謝謝,我已經看到代碼中的一些錯誤,現在添加分隔符命令並進行更改。 –

+0

我還沒有檢查完整的代碼。如果使用分隔符解決了這個問題,那麼請在他們單獨的主題中詢問任何後續問題。 – Shadow