gpt4 book ai didi

mysql - 在存储过程中检索多行

转载 作者:行者123 更新时间:2023-11-29 09:49:30 27 4
gpt4 key购买 nike

我需要执行全表级扫描,因为它应该根据用户 ID 检索多行。

因为我曾经收到 sqlMessage 指出“子查询返回超过 1 行”。

{ Error: ER_SUBQUERY_NO_1_ROW: Subquery returns more than 1 row
...
code: 'ER_SUBQUERY_NO_1_ROW',
errno: 1242,
sqlMessage: 'Subquery returns more than 1 row',
sqlState: '21000',
index: 0,
sql: 'CALL GetLocationTag(1)' }

这是对 GetLocationTag() 代码的调用

DELIMITER $$

CREATE
DEFINER = `root`@`localhost`
PROCEDURE `someDB`.`GetLocationTag`(IN `UserId` BIGINT)
LANGUAGE SQL
DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER
COMMENT 'Retrieves Multiple Stored Location Tags, Address, Location, etc. based on User_ID'
BEGIN
DECLARE flag INT(11);
DECLARE locRecord VARCHAR(255);

IF EXISTS (SELECT * FROM `location_map` WHERE `user_id` = User_Id ) THEN
BEGIN
SELECT * INTO locRecord FROM `location_map` WHERE `user_id` = User_Id;
SET flag = 1;
END;
ELSE
SET flag = 0;
SET locRecord = 0;
END IF;

SELECT locRecord, flag;
END$$

DELIMITER ;

对于以下查询,

SELECT * INTO locRecord FROM `location_map` WHERE `user_id` = User_Id;

我需要如何以数组的形式检索所有行并将其存储到变量中,或者我该如何编码才能解决错误消息?

最佳答案

使用 View 来存储获取的数据而不是变量

DELIMITER $$

CREATE
DEFINER = `root`@`localhost`
PROCEDURE `someDB`.`GetLocationTag`(IN `User_Id` BIGINT)
LANGUAGE SQL
DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
COMMENT 'Retrieves Multiple Stored Location Tags, Address, Location, etc. based on User_ID'
BEGIN
DECLARE flag INT(11);
DECLARE locRecord VARCHAR(255);

IF EXISTS (SELECT * FROM `location_map` WHERE `user_id` = User_Id ) THEN
BEGIN
SET @viewQry = CONCAT('CREATE OR REPLACE VIEW `someDB`.`temp` as SELECT *, 1 as flag FROM `location_map` WHERE `user_id` = ',User_Id,';');
PREPARE stmt FROM @viewQry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT * FROM temp;
END;
ELSE
SELECT 0 AS locRecord, 0 AS flag;
END IF;
END$$

DELIMITER ;

关于mysql - 在存储过程中检索多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com