代码之家  ›  专栏  ›  技术社区  ›  muhtarkator

创建存储过程插入和更新

  •  0
  • muhtarkator  · 技术社区  · 2 年前

    我试图在存储过程中同时插入和更新查询, 但是语法错误

    #1064年的今天,您的SQL语法出现错误;请查看与您的MariaDB服务器版本对应的手册,以了解在第1行“@product_id int(11)、@ProductCode varchar(255)和@ProductName varchar(2…)附近使用的正确语法

    我的问题就在这里

    DELIMITER //
    CREATE PROCEDURE UpdateProductList(IN @product_id int(11), IN @ProductCode varchar(255), IN @ProductName varchar (255), IN @PiecesInBox varchar (255), IN @Price varchar (255))
    BEGIN
    IF @product_id = 0
    INSERT INTO products(ProductCode, ProductName, PiecesInBox, Price) VALUES(@ProductCode, @ProductName, @PiecesInBox, @Price);
    ELSE
    UPDATE products SET ProductCode = @ProductCode, ProductName = @ProductName, PiecesInBox = @PiecesInBox, Price = @Price WHERE product_id = @product_id;
    END IF
    END //
    DELIMITER ;
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   lemon    2 年前

    避免使用 @ 因为它们是为MariaDB中的全局变量保留的:

      DELIMITER //
      
      CREATE PROCEDURE UpdateProductList(
         IN in_product_id     INT(11),
         IN in_ProductCode    VARCHAR(255), 
         IN in_ProductName    VARCHAR(255), 
         IN in_PiecesInBox    VARCHAR(255), 
         IN in_Price          VARCHAR(255)
      )
      BEGIN
         IF in_product_id = 0 THEN
            INSERT INTO 
                products(ProductCode, ProductName, PiecesInBox, Price) 
            VALUES
                (in_ProductCode, in_ProductName, in_PiecesInBox, in_Price);
         ELSE
            UPDATE 
                products 
            SET 
                ProductCode = in_ProductCode, 
                ProductName = in_ProductName, 
                PiecesInBox = in_PiecesInBox, 
                Price       = in_Price 
            WHERE 
                product_id = in_product_id;
         END IF;
      END //
      
      DELIMITER ;
    

    如果查询仍然没有运行,请打印给定的错误,我可能会更新答案。