【问题标题】:Create stored procedure Insert and Update创建存储过程插入和更新
【发布时间】:2022-07-30 22:02:22
【问题描述】:

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

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 '@product_id int(11), IN @ProductCode varchar(255), IN @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 ;

【问题讨论】:

    标签: mysql sql stored-procedures mariadb


    【解决方案1】:

    避免使用@,因为它们是为 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 ;
    

    【讨论】:

    • 我仍然遇到语法错误 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 10 行的“INSERT INTO products(ProductCode, ProductName, PiecesInBox, Pri...”附近使用的正确语法
    • 更新了正确的IF-THEN-ELSE 语法和END IF 之后的分号。现在可以用了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多