我有一个查询,但是当我执行它时,mysql说我:
SQL错误(1064):您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的“ END WHILE”附近使用
以下是查询:
BEGIN
DECLARE _ProductoId;
DECLARE _ProductoCosto INT;
DECLARE _Cantidad INT;
DECLARE _id INT DEFAULT 129;
WHILE _id < 143 DO
SET _ProductoId = SELECT Compra_ProductoId from tblcompradetalle WHERE CompraDetalleId = _id;
SET _ProductoCosto = SELECT ProductoCosto from tblproducto WHERE ProductoId = _ProductoId;
SET _Cantidad = SELECT CompraDetalleCantidad FROM tblcompradetalle WHERE CompraDetalleId = _id;
UPDATE tblcompradetalle
SET compraDetalleSubtotal = (_ProductoCosto * _Cantidad),
SET ProductoPrecio= _ProductoCosto WHERE CompraDetalleId=_id;
SET _id = _id + 1;
END WHILE;
END
问题是我逐行查看了查询,但是找不到任何语法错误。哪个语法错误?
答案 0 :(得分:0)
您有两个SET关键字。语法为UPDATE tbl SET a=1, b=2 WHERE...
。
在行末使用SET命令设置更新格式,然后您很容易记住不要包含两个SET关键字。
UPDATE tblcompradetalle SET
compraDetalleSubtotal= (_ProductoCosto * _Cantidad),
ProductoPrecio= _ProductoCosto
WHERE CompraDetalleId=_id;
答案 1 :(得分:0)
我认为您用双SET拼写了更新查询。 Mariadb文档提供了此查询的示例。
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
[PARTITION (partition_list)]
SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
答案 2 :(得分:0)
请尝试使用此存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `my_procedure`()
BEGIN
DECLARE _ProductoId int;
DECLARE _ProductoCosto INT;
DECLARE _Cantidad INT;
DECLARE _id INT DEFAULT 129;
set _id = 129;
WHILE _id < 143 DO
SET _ProductoId = (SELECT Compra_ProductoId from tblcompradetalle WHERE CompraDetalleId = _id);
SET _ProductoCosto = (SELECT ProductoCosto from tblproducto WHERE ProductoId = _ProductoId);
SET _Cantidad = (SELECT CompraDetalleCantidad FROM tblcompradetalle WHERE CompraDetalleId = _id);
UPDATE tblcompradetalle
SET compraDetalleSubtotal = (_ProductoCosto * _Cantidad),
ProductoPrecio= _ProductoCosto WHERE CompraDetalleId=_id;
SET _id = _id + 1;
END WHILE;
END
如果您通过创建表给我一些示例数据,我可以对其进行进一步的测试
答案 3 :(得分:0)
也许还有其他方法,但以下方法可以作为存储过程起作用:
CREATE DEFINER=`root`@`localhost` PROCEDURE `spCompraDetalle`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE _ProductoId int;
DECLARE _ProductoCosto INT;
DECLARE _Cantidad INT;
DECLARE _id INT DEFAULT 129;
WHILE _id < 143 DO
SET _ProductoId = (SELECT Compra_ProductoId from tblcompradetalle WHERE CompraDetalleId = _id);
SET _ProductoCosto = (SELECT ProductoCosto from tblproducto WHERE ProductoId = _ProductoId);
SET _Cantidad = (SELECT CompraDetalleCantidad FROM tblcompradetalle WHERE CompraDetalleId = _id);
UPDATE tblcompradetalle
SET compraDetalleSubtotal = (_ProductoCosto * _Cantidad),
CompraDetallePrecio= _ProductoCosto WHERE CompraDetalleId=_id;
SET _id = _id + 1;
END WHILE;
END
...
CALL `spCompraDetalle`()