【发布时间】:2014-10-15 12:19:31
【问题描述】:
您好,我一直在尝试通过 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
【问题讨论】:
-
我不喜欢这样的外观 ...
"SET p_city = (SELECT CITY FROM countries GROUP BY CITY);"大概该查询可以返回多行(否则为什么要 GROUP BY ),您将其分配给 VARCHAR 你会怎么做期望 VARCHAR 持有? -
@DaveHowes 我需要将值填充到前端的城市、州和国家组合框中
-
问题出在您的 SQL 中,而不是在 Java 代码中。在一些工具中测试你的 SQL
标签: java mysql jdbc callable-statement