我在中有以下存储过程 phpmyadmin
使用 mysql
:
CREATE DEFINER=`user`@`localhost` PROCEDURE `set_address`(IN `patient_street` VARCHAR(128), IN
`patient_city` VARCHAR(45), IN `patient_post_code` VARCHAR(45), IN `patient_state_or_province` VARCHAR(45), IN `patient_country` VARCHAR(45))
NOT DETERMINISTIC NO SQL SQL SECURITY
DEFINER
BEGIN
IF NOT EXISTS (SELECT a.address_id FROM address as a where a.street = patient_street and a.city = patient_city and a.post_code = patient_post_code and a.country = patient_country)
THEN
BEGIN
INSERT INTO address (street, city, post_code, state_or_province, country) VALUES (patient_street, patient_city, patient_post_code, patient_state_or_province, patient_country);
SELECT LAST_INSERT_ID();
END;
ELSE
BEGIN
SELECT a.address_id FROM address as a where a.street = patient_street and a.city = patient_city and a.post_code = patient_post_code and a.country = patient_country
END;
END IF;
END;
但是,我有两个错误 IF NOT EXISTS
:
无法识别的关键字(接近(如果不存在)
意外标记(近()
1条答案
按热度按时间mwkjh3gx1#
就我个人而言,如果我需要编写一个执行指定操作并返回结果集的过程,我会这样编写:
如果存在一行,我们不需要运行两行
SELECT
声明。我们可以对该行进行检查,并使用单个SELECT
.如果没有得到匹配的行,则插入一行,并检索自动递增id。
在任何一种情况下(找到的行或添加的行),都将地址\u id作为结果集返回。同样,我们可以用一个select语句,而不是两个不同的语句。
对我来说,限制返回resultsets的位置数和查询数据库的次数更有意义。