2014-03-30 66 views
0
DELIMITER $$ 

CREATE TRIGGER update_cnitrand_cust_code AFTER INSERT ON `cnitrand` 
FOR EACH ROW 
BEGIN 
    DECLARE bill_no INT DEFAULT 0; 

    IF NEW.bill_no = 0 THEN 
     SET bill_no = (SELECT bill_no FROM cnitrand 
         WHERE (tx_no = NEW.tx_no AND 
           input_area = NEW.input_area AND 
           tx_line_no = NEW.tx_line_no AND 
           bill_no <> "") OR 
          (tx_no = NEW.tx_no AND 
           bill_no <> "") 
         LIMIT 1); 
    ELSE 
     SET bill_no = NEW.bill_no; 
    END IF; 

    INSERT INTO tblrptcnitrandmap 
    (tx_no, input_area, tx_line_no, bill_cust_code, bill_no) 
    VALUES 
    (NEW.tx_no, NEW.input_area, NEW.tx_line_no, NEW.bill_cust_code, bill_no); 

END;$$ 

它返回一个错误语法问题随着MySQL的触发

“#1064 - 你在你的SQL语法错误;检查对应于您的MySQL服务器版本的使用权语法手册近'$$'在第14" 行

能否请你告诉我,什么是错的代码..

回答

0
DELIMITER $$ 

CREATE TRIGGER update_cnitrand_cust_code AFTER INSERT ON `cnitrand` 
FOR EACH ROW 
BEGIN 
    DECLARE bill_no INT DEFAULT 0; 

    IF NEW.bill_no = 0 THEN 
     SET bill_no = (SELECT bill_no FROM cnitrand WHERE (tx_no = NEW.tx_no AND input_area = NEW.input_area AND tx_line_no = NEW.tx_line_no AND bill_no <> "") OR (tx_no = NEW.tx_no AND bill_no <> "") LIMIT 1); 
    ELSE 
     SET bill_no = NEW.bill_no; 
    END IF; 

    INSERT INTO tblrptcnitrandmap (tx_no, input_area, tx_line_no, bill_cust_code, bill_no) VALUES (NEW.tx_no, NEW.input_area, NEW.tx_line_no, NEW.bill_cust_code, bill_no); 

END$$ 
DELIMITER ; 
+0

为什么你认为'END; $$'错了,'END $$ DELIMITER;'是正确的? –

+0

请参阅[*存储过程 - MySQL *](http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.pdf) –