2014-10-15 2 views
0

Привет Я пытаюсь выбрать несколько строк, вызывая процедуру через CallableStatement. Пока я пытаюсь заполнить набор результатов в поле со списком, код возвращает ошибку следующим образом.Ошибка: subquery Возвращает несколько строк

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 
+2

Мне не нравится внешний вид этого ... '" SET p_city = (SELECT CITY FROM countries GROUP BY CITY); "' предположительно, что запрос может возвращать более одной строки (почему бы вы GROUP BY в противном случае), который вы назначаете VARCHAR, что бы вы ожидали, что VARCHAR будет удерживаться? – DaveH

+0

@DaveHowes Мне нужны значения для заполнения в поле со списком городов, штатов и стран в передней части – randxy

+0

Проблема в вашем SQL, а не в коде Java. Проверьте свой SQL в каком-то инструменте – Ilya

ответ

1

@DaveHowes и @Ilya правильно, проблема с SQL заявления.

Допустим, в таблице стран состоит из следующих действий:

 
city   state   country 
'New York'  'New York'  'USA' 
'Los Angeles' 'California' 'USA' 
'Chicago'  'Illinois'  'USA' 
'Ottawa'  ''    'Canada' 

Теперь, если мы возьмем ваши вложенные запросы из вашего примера:

SELECT city FROM countries GROUP BY city 

вернется:

 
city 
'New York' 
'Los Angeles' 
'Chicago' 
'Ottawa' 

Вы пытаетесь назначить несколько результатов для varchar, следовательно, вы получаете исключение. Subquery возвращает m руды, чем 1 ряд ».

Смежные вопросы