1

我的存储过程有问题(在 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

有任何想法吗?

4

2 回答 2

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)

只是一个想法。可能是一种更清洁、更快速的编写替代方案。

希望有帮助

于 2013-02-19T12:44:39.280 回答
0

这是问题的答案 - 带有 INSERT 的存储过程,在 DUPLICATE 上更新。

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;
于 2017-02-04T10:09:27.607 回答