[英]MySQL stored procedure If exists
我正在 MySQL 中创建一个存储过程,但在使用 IF EXISTS 时遇到了问题
我的 SQL 是;
CREATE DEFINER=`##`@`%` PROCEDURE `myTestProceedure`(IN _id INT)
BEGIN
IF EXISTS (SELECT * FROM cms.variables WHERE tmplvarid = 5 and id = _id) THEN
BEGIN
UPDATE cms.variables SET value = now() WHERE id = _id and tmplvarid = 5;
END;
ELSE
BEGIN
INSERT INTO cms.variables (`tmplvarid`, `contentid`, `value`) VALUES (5, _id, now());
END;
END IF;
END
尝试这个:
CREATE DEFINER=`##`@`%` PROCEDURE `myTestProceedure`(IN _id INT)
BEGIN
IF (SELECT count(*) FROM cms.variables WHERE tmplvarid = 5 and id = _id)>0 THEN
BEGIN
UPDATE cms.variables SET value = now() WHERE id = _id and tmplvarid = 5;
END;
ELSE
BEGIN
INSERT INTO cms.variables (`tmplvarid`, `contentid`, `value`) VALUES (5, _id, now());
END;
END IF;
END
接受的答案对我运行 MariaDB 15.1 不起作用。 它只是不断地将 IF 条件评估为真,并尝试插入记录,即使它已经存在。
这就是我最终使用的:
CREATE DEFINER=`ghost`@`localhost` PROCEDURE `proc_updateTable`(IN `_id` mediumint,IN `_arg2` varchar(100))
BEGIN
#Routine body goes here...
DECLARE exist DECIMAL DEFAULT 0;
SELECT COUNT(*) INTO exist FROM `database`.`tbl_example` WHERE (`tbl_example`.`ID` = _id AND `tbl_example`.`arg2` = _arg2);
IF exist < 1 THEN
BEGIN
INSERT INTO `database`.`tbl_example` VALUES (_id,_arg2);
END;
END IF;
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.