Ошибка в запросе - MySQL (220102)
Формулировка задачи:
Всем привет!
Написал процедуру, но синтаксис не валидируется... а понять, в чем проблема не могу... кто поможет, буду признателен)
CREATE PROCEDURE calculate_precisions
(
IN distribution VARCHAR(45),
IN PRECISION VARCHAR(45),
IN total_schedules INT,
IN destination VARCHAR(100)
)
BEGIN
SET @distribution = distribution;
SET @PRECISION = PRECISION;
SET @total_schedules = total_schedules;
SET @destination = destination;
.......
ENDYou have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'precision VARCHAR(45),
IN total_schedules INT,
IN destination VARCHAR(10' at line 4Решение задачи: «Ошибка в запросе»
textual
Листинг программы
SET @query = CONCAT ( 'INSERT INTO ', destination, '(processing_date, 0_25, 0_25_share, 25_50, 25_50_share, 50_75, 50_75_share, 75_100, 75_100_share) VALUES (CURDATE(), @0_25, @share_0_25, @25_50, @share_25_50, @50_75, @share_50_75, @75_100, @share_75_100)' ); PREPARE stmt FROM @query; EXECUTE stmt;
Объяснение кода листинга программы
- Создается переменная
query, которая получает значение, сконкатенированное из нескольких строк. - В переменной
queryформируется строка SQL-запроса. - Строка запроса содержит
INSERT INTO ... VALUES (CURDATE(), @0_25, @share_0_25, @25_50, @share_25_50, @50_75, @share_50_75, @75_100, @share_75_100). - Выполняется запрос с помощью
EXECUTE stmt;. - Для подготовки запроса используется
PREPARE stmt FROM @query;. - В запросе используется
CURDATE(), чтобы вставить текущую дату в таблицу. - В запросе используются переменные
@0_25,@share_0_25,@25_50,@share_25_50,@50_75,@share_50_75,@75_100,@share_75_100, которые должны быть определены или установлены в значения до выполнения запроса.