我的存储过程出现问题(在MySQL上)。如果记录存在,我需要表的数据更新过程,否则插入记录。我有:
DELIMITER //
CREATE PROCEDURE saveorUpdate(in product varchar(30), price int, stock int, active varchar(5))
BEGIN
DECLARE id int;
SELECT id_pro FROM products WHERE product=product into id;
IF(id_pro=id)THEN
UPDATE products SET product=product, price=price, stock=stock, active=active
WHERE id_pro=id;
ELSE
INSERT INTO products (product, price, stock, active) VALUES
(product, price, stock, active);
END IF;
END
有什么想法吗?
答案 0 :(得分:5)
由于您的数据库是MySQL,您可以使用 INSERT INTO ... ON DUPLICATE KEY 语法并废弃存储过程内容。
INSERT INTO products (
product, price, stock, active
) VALUES (
$product, $price, $stock, $active
) ON DUPLICATE KEY UPDATE
product=VALUES(product)
, price=VALUES(price)
, stock=VALUES(stock)
, active=VALUES(active)
只是一个想法。可以更清洁,更快地编写替代方案。
希望有所帮助
答案 1 :(得分:0)
以下是问题的答案 - 在DUPLICATE上使用INSERT,UPDATE存储过程。
CREATE DEFINER=`root`@`localhost` PROCEDURE `manage-business`
(IN `bname` VARCHAR(200)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
INSERT INTO tbl_company (co_name) VALUES (bname) ON DUPLICATE key UPDATE co_name=bname;