0

嗨,我一直在尝试通过 CallableStatement 调用该过程来选择多行。当我尝试将结果集填充到组合框时,代码返回错误如下。

Java错误:

                   java.sql.SQLException: Subquery returns more than 1 row

存储过程:

CREATE DEFINER=`user_name`@`%` PROCEDURE `GET_USER_PROFILE`(
            IN p_user_id VARCHAR(150),
            IN p_role VARCHAR(150),
            OUT p_user_data VARCHAR(200),
            OUT p_city VARCHAR(150),
            OUT p_state VARCHAR(150),
            OUT p_country VARCHAR(150),
            OUT q_Msg VARCHAR(150))
BEGIN

DECLARE available INT DEFAULT 0;
 SET p_city = (SELECT CITY FROM countries GROUP BY CITY);
 SET p_state = (SELECT STATE FROM countries GROUP BY STATE);
 SET p_country = (SELECT COUNTRY FROM countries GROUP BY COUNTRY);

SELECT COUNT(EMAIL) INTO available FROM STAFF_PROFILE WHERE EMAIL = p_user_id AND ROLE = p_role;

IF(available=1) THEN
        SET p_user_data = (SELECT * FROM STAFF_PROFILE WHERE EMAIL = p_user_id AND ROLE = p_role );
else
    SET q_Msg = 'USER_LOGGED_FIRST';
END IF;

END
4

1 回答 1

2

@DaveHowes 和 @Ilya 是正确的,问题出在您的 SQL 语句上。

假设在您的国家/地区表中包含以下内容:

城邦国家
'纽约' '纽约' '美国'
'洛杉矶' '加利福尼亚' '美国'
'芝加哥' '伊利诺伊州' '美国'
'渥太华''''加拿大'

现在,如果我们从您的示例中获取您的子查询:

SELECT city FROM countries GROUP BY city

会返回:

城市
'纽约'
'洛杉矶'
'芝加哥'
“渥太华”

您正在尝试将多个结果分配给 varchar,因此您得到异常“子查询返回超过 1 行”。

于 2014-10-15T13:02:32.317 回答