Объявить ошибку mariaDB. Как можно исправить этот запрос?
Я пытаюсь заполнить таблицу несколькими столбцами из другой таблицы с идентификатором, но я получил эту ошибку:
1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с типом продуктов.CategoryIDID; ОБЪЯВЛЯЙТЕ тип продукции t_productid.ProductID;' в строке 4
Я не знаю, как это исправить, надеюсь, вы мне поможете.
DELIMITER //
Create procedure getProducts(v_categoryid int)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE t_categoryid type of products.CategoryID;
DECLARE t_productid type of products.ProductID;
DECLARE t_productname type of products.ProductName;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE cur1 CURSOR(p_categoryid int)
FOR
SELECT CategoryID, ProductID, ProductName
FROM products
WHERE CategoryID = p_categoryid;
create table IF NOT exists curProducts(
CategoryID int(10),
ProductID int(10),
ProductName varchar(40));
truncate table curProducts;
open cur1(v_categoryid);
read_loop: LOOP
FETCH cur1 INTO t_categoryid, t_productid, t_productname;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO curProducts VALUES (t_categoryid, t_productid, t_productname);
END LOOP;
close cur1;
select * from curProducts;
END //
DELIMITER ;
2 ответа
Решение
Вы можете использовать явные типы или обновить до mariadb-10.3, где TYPE OF
Синтаксис был введен.
Это решение позволяет избежать синтаксической ошибки, так как эти операторы не нужны!
DECLARE done INT DEFAULT FALSE;
DECLARE t_categoryid type of products.CategoryID;
DECLARE t_productid type of products.ProductID;
DECLARE t_productname type of products.ProductName;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE cur1 CURSOR(p_categoryid int)
FOR
SELECT CategoryID, ProductID, ProductName
FROM products
WHERE CategoryID = p_categoryid;
open cur1(v_categoryid);
read_loop: LOOP
FETCH cur1 INTO t_categoryid, t_productid, t_productname;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO curProducts VALUES (t_categoryid, t_productid, t_productname);
END LOOP;
close cur1;
Все это можно заменить просто
INSERT INTO curProducts VALUES (t_categoryid, t_productid, t_productname)
SELECT CategoryID, ProductID, ProductName
FROM products
WHERE CategoryID = p_categoryid;