使用存储过程插入和更新

时间:2013-02-19 12:42:26

标签: mysql sql stored-procedures

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

有什么想法吗?

2 个答案:

答案 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;