2016-11-28 3 views
-1

Я написал хранимую процедуру в MySQL. Я получаю проблему при передаче значения дня из даты в целочисленное значение. Мне нужно передать Day(now()) в целое число, так как мне нужно сделать некоторые манипуляции с этим значением.Как отладить эту ошибку синтаксиса хранимой процедуры MySQL?

См. Ниже подробный код процедуры.

DROP PROCEDURE IF EXISTS `CREATE_PARTITION_FOR_MONTH`(); 
delimiter // 
CREATE PROCEDURE `CREATE_PARTITION_FOR_MONTH`() 
BEGIN 
    DECLARE current_month_total_days_count INT; 
    DECLARE current_month_days_left INT; 
    DECLARE current_day INT; 
    DECLARE next_month_first_date DATE ; 
    DECLARE loop_start_val INT DEFAULT 0; 
    DECLARE total_days_in_next_month INT; 
    DECLARE next_month_var_date DATE; 
    DECLARE partition_val VARCHAR(20) DEFAULT NULL; 
    DECLARE range_val INT DEFAULT 0; 
    SET current_month_total_days_count := CAST(DAY(LAST_DAY(now())) AS UNSIGNED); 
    SET current_day := CAST(EXTRACT(MONTH FROM CURDATE()) AS UNSIGNED); 
    SET current_month_days_left := current_month_total_days_count - current_day; 
    SET next_month_first_date := DATE(ADDDATE(CURDATE(),current_month_days_left)); 
    SET total_days_in_next_month := DAY(LAST_DAY(next_month_first_date)); 
    SET next_month_var_date := next_month_first_date; 
     SET loop_start_val := 0; 
    WHILE loop_start_val < total_days_in_next_month DO 
      SET next_month_var_date := DATE(ADDDATE(next_month_first_date,loop_start_val)); 
      SET partition_val := CONCAT('p',TO_DAYS(next_month_var_date)); 
      SET range_val := TO_DAYS(next_month_var_date); 
      ALTER TABLE XYZ ADD PARTITION (PARTITION partition_val VALUES LESS THAN (range_val));  
      SET loop_start_val := loop_start_val+1; 

    END WHILE; 

END //; 

DELIMITER ; 

Я получаю эту ошибку

ERROR 1064 (42000): У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'range_val INT DEFAULT 0; SET current_month_total_days_count = SELECT CAST (DAY (L»в строке 11

+2

' DELCARE' опечатка –

+0

Узнайте, как читать сообщения об ошибках MySQL. Тогда это проще. –

+0

Спасибо за ваши комментарии. Спасибо, что указали ошибку. – Abhimanyu

ответ

0

Посмотрите на линию метания ошибку *DELCARE* range_val INT DEFAULT 0; ... DELCARE является проблемой. Должно быть DECLARE. Забавно ...

+0

Я также отредактировал que stion, я получаю синтаксическую ошибку в строке SET next_month_var_date: = DATE (ADDDATE (next_month_first_date, loop_start_val)); – Abhimanyu

+0

Хорошо, конечно, но опубликуйте это как отдельный вопрос, закрывающий этот. – Rahul

Смежные вопросы