简体   繁体   English

使用Mysql存储过程检查行是否存在

[英]Check if row exists using Mysql store procedure not working

At mysql command prompt, I run: 在mysql命令提示符下,我运行:

SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')

returns 回报

EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')
1

but following procedure doesn't print as Exists. 但是以下步骤不会显示为“存在”。 I need to get inside IF statement. 我需要进入IF语句。 Please let me know what change could get me inside IF. 请让我知道什么变化可以使我进入IF。

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%searchName%') ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

Call to procedure: 调用程序:

SET @increment = 0;
call verifyAndUpdate30('Nadiya', 5532, @increment);

You need to construct the LIKE string the hard way, using CONCAT('%', searchName, '%') : 您需要使用CONCAT('%', searchName, '%')艰难地构造LIKE字符串:

,,,
IF ( SELECT EXISTS (
    SELECT 1
    FROM test1
    WHERE name1 like CONCAT('%', searchName, '%')   -- Build %searchName% from parts
 ) ) THEN 
,,,

You need to concatenate. 您需要串联。

Since searchName can be taken as hardcoded string, replace your query this way: 由于searchName可以作为硬编码字符串, searchName可以用以下方式替换查询:

CONCAT('%', searchName, '%')

Full Code 完整代码

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like CONCAT('%', searchName, '%')) ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

See more about CONCAT in MySQL. 进一步了解MySQL中的CONCAT

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM