1

我正在使用以下存储过程来填充日期维度。它给出了以下错误

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 6 行的“DELETE FROM Date_Dim SET v_full_date = p_start_date WHILE v_full_date < p_end_d”附近使用正确的语法

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
4

2 回答 2

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 ;
于 2013-02-07T06:46:34.117 回答
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;
|
于 2013-02-07T06:47:42.663 回答