2013-02-07 33 views
1

我正在使用以下存储过程来填充日期维度。并给出以下错误在mysql中使用存储过程插入日期维度日期时出错

#1064 - 您的SQL语法错误;检查手册中 对应于你的MySQL服务器版本正确的语法使用 附近 'DELETE FROM DATE_DIM SET v_full_date = p_start_date WHILE v_full_date < p_end_d' 第6行

CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE) 

BEGIN 

DECLARE v_full_date DATE 
DELETE FROM Date_Dim 
SET v_full_date = p_start_date 

WHILE v_full_date < p_end_date 
DO 
INSERT INTO Date_Dim 
(
      Full_Date , 
      DayOfMonth , 
      DayOfYear , 
      DayOfWeek , 
      Day_Name , 
      Month_Number, 
      Month_Name, 
      Year, 
      Quarter 
) 
VALUES 
(
      v_full_date, 
      DAYOFMONTH(v_full_date), 
      DAYOFYEAR(v_full_date), 
      DAYOFWEEK(v_full_date), 
      DAYNAME(v_full_date), 
      MONTH(v_full_date), 
      MONTHNAME(v_full_date), 
      YEAR(v_full_date), 
      QUARTER(v_full_date) 
    ); 

SET v_full_date = DATE_ADD(v_full_date, INTERVAL 1 DAY) 

END WHILE 
END 

回答

1

你必须划语句。试试这个:

DELIMITER $$ 

CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE) 

BEGIN 

DECLARE v_full_date DATE; 
DELETE FROM Date_Dim; 
SET v_full_date = p_start_date; 

WHILE v_full_date < p_end_date 
DO 
INSERT INTO Date_Dim 
(
      Full_Date , 
      DayOfMonth , 
      DayOfYear , 
      DayOfWeek , 
      Day_Name , 
      Month_Number, 
      Month_Name, 
      Year, 
      Quarter 
) 
VALUES 
(
      v_full_date, 
      DAYOFMONTH(v_full_date), 
      DAYOFYEAR(v_full_date), 
      DAYOFWEEK(v_full_date), 
      DAYNAME(v_full_date), 
      MONTH(v_full_date), 
      MONTHNAME(v_full_date), 
      YEAR(v_full_date), 
      QUARTER(v_full_date) 
    ); 

SET v_full_date = DATE_ADD(v_full_date, INTERVAL 1 DAY); 

END WHILE; 
END $$ 

DELIMITER ; 
+0

运作良好。谢谢 – user1597811

+0

好吧!祝你好运! –

0

使用

DELIMITER | 

CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE) 

BEGIN 

DECLARE v_full_date DATE; 
DELETE FROM Date_Dim; 
SET v_full_date = p_start_date; 

WHILE v_full_date < p_end_date 
DO 
INSERT INTO Date_Dim 
(
      Full_Date , 
      DayOfMonth , 
      DayOfYear , 
      DayOfWeek , 
      Day_Name , 
      Month_Number, 
      Month_Name, 
      Year, 
      Quarter 
) 
VALUES 
(
      v_full_date, 
      DAYOFMONTH(v_full_date), 
      DAYOFYEAR(v_full_date), 
      DAYOFWEEK(v_full_date), 
      DAYNAME(v_full_date), 
      MONTH(v_full_date), 
      MONTHNAME(v_full_date), 
      YEAR(v_full_date), 
      QUARTER(v_full_date) 
    ); 

SET v_full_date = DATE_ADD(v_full_date, INTERVAL 1 DAY); 

END WHILE; 
END; 
|