简体   繁体   中英

Check if row exists using Mysql store procedure not working

At mysql command prompt, I run:

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. Please let me know what change could get me inside 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, '%') :

,,,
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:

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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