代码之家  ›  专栏  ›  技术社区  ›  3ashmawy

MySQL触发器插入到另一个表中

  •  1
  • 3ashmawy  · 技术社区  · 14 年前

    语法方面,以下查询有什么问题:

    -- Trigger DDL Statements
    DELIMITER $$
    
    USE `mydb`$$
    
    DROP TRIGGER IF EXISTS annual_scenario;
    
    CREATE TRIGGER annual_scenario 
    AFTER INSERT ON quote FOR EACH ROW
    BEGIN
      SET @annual_date = (SELECT  NEW.date - INTERVAL 1 YEAR);
      SET @annual =  (SELECT COUNT(DISTINCT Q.date)
                      FROM quote Q, instrument I
                      WHERE Q.date = I.date 
                        AND Q.ticker = I.date
                        AND Q.market = I.date
                        AND I.type != 'bank'
                        AND Q.date =  @annual_date
                        AND Q.ticker = NEW.ticker
                        AND Q.market = NEW.market
                      );
       SET @annual_close = (SELECT Q.close
                            FROM quote Q
                            WHERE Q.ticker = NEW.ticker 
                              AND Q.date = @annual_date
                              AND Q.market = NEW.market
                            );
    
       SET @ratio = (NEW.close / @annual_close);
    
        IF @annual = 1 THEN
          INSERT INTO 
            scenario(period,ticker,date_1,date_2,close_1,close_2,ratio)
            VALUES('annual',NEW.ticker,NEW.date,@annual_date,NEW.close,@annual_close,@ratio);
        ENDIF 
    END $$
    DELIMITER ; 
    

    Error Code: 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TRIGGER annual_scenario 
    AFTER INSERT ON quote FOR EACH ROW
    BEGIN
      SE' at line 2
    

    我要做的是检查年报是否为1,然后我会在表场景中插入一条新记录,其中包含相应的值。

    1 回复  |  直到 10 年前
        1
  •  2
  •   3ashmawy    14 年前

    显然mysql5.1没有使用ENDIF,而是使用ENDIF。更不用说思念了;结束之后如果和结束。