2013-04-08 63 views
1

這是我第一次在我的網站上使用php的觸發器。我試圖達到的條件和位置字段(位於庫存表中)更新時,觸發器將向LOG表中插入一行。更新後的DB2觸發錯誤

下面是當我chenged狀況和位置字段中顯示的錯誤:

SQL0723N An error occurred in a triggered SQL statement in trigger "DB2ADMIN.CONDITI".   
Information returned for the error includes SQLCODE "-433", 
SQLSTATE "22001" and message tokens "Condition changed from bad ". SQLSTATE=09000 SQLCODE=-723 

這裏是我的觸發代碼,我使用數據工作室創建的觸發器,它成功了:

我已經編輯了扳機代碼和日誌表結構,但仍然會產生相同的錯誤

CREATE TRIGGER DB2ADMIN.CONDITION_LOG AFTER UPDATE OF CONDITION, LOCATION ON DB2ADMIN.INVENTORY 
REFERENCING OLD AS o NEW AS n 
FOR EACH ROW MODE DB2SQL NOT SECURED 
INSERT INTO LOG VALUES ('',CURRENT TIMESTAMP, o.CONDITION, n.CONDITION, o.LOCATION, n.LOCATION); 
+0

我想你壞的查詢設計.. – 2013-04-08 07:07:38

+0

最後一列的數據太長。檢查查詢過程中最後一列的長度和您嘗試插入的數據。 – Meherzad 2013-04-08 07:15:30

+0

@Meherzad最後一列的長度爲1000個字符,應該足夠了 – 2013-04-08 07:20:47

回答

2

繼承人樣品UPDATE觸發器

這可能不是回答你的問題,但我認爲它可以幫助您構建一個更好的觸發器聲明:

DELIMITER $$ 
CREATE 
    TRIGGER `blog_after_update` AFTER UPDATE 
    ON `blog` 
    FOR EACH ROW BEGIN 
     IF NEW.deleted THEN 
      SET @changetype = 'DELETE'; 
     ELSE 
      SET @changetype = 'EDIT'; 
     END IF; 
     INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype); 
    END$$ 
DELIMITER ; 

資源鏈接(source