2

在 mysql 命令提示符下,我运行:

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

返回

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

但以下过程不会打印为存在。我需要进入 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 ;

调用程序:

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

2 回答 2

3

您需要以LIKE困难的方式构造字符串,使用CONCAT('%', searchName, '%')

,,,
IF ( SELECT EXISTS (
    SELECT 1
    FROM test1
    WHERE name1 like CONCAT('%', searchName, '%')   -- Build %searchName% from parts
 ) ) THEN 
,,,
于 2012-12-23T18:38:33.303 回答
3

你需要串联。

由于searchName可以作为硬编码字符串,请以这种方式替换您的查询:

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

完整代码

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 ;

CONCAT在 MySQL 中查看更多信息。

于 2012-12-23T18:40:09.247 回答