2017-02-04 15 views
-1

Когда я пытаюсь вызвать процедуру с call insertp_detail ('P005','02','T001','CAT2'), он будет показывать ошибку:Невозможно выполнить вызов для процедуры

SQL0811N Результат скалярной полной выборки, SELECT INTO заявления или стоимостей в заявлении больше один ряд. SQLSTATE = 21000

Ожидаемый результат, который я хочу с помощью этой процедуры, заключается в том, чтобы вставить значения в таблицу purchase_detail.

CREATE PROCEDURE insertp_detail 
(IN purchase_id char(4), seat_id char(2), trans_id char(4), seat_type varchar(5)) 
BEGIN 
    IF ((SELECT COUNT(trans_id) 
       FROM purchase_detail 
       GROUP BY trans_id) < 3) 
    THEN INSERT into purchase_detail values(purchase_id, seat_id, trans_id, seat_type); 

end if; 
end 
+0

'(SELECT COUNT (trans_id) ОТ purchase_detail GROUP BY trans_id)' возвращает несколько строк - вы имели в виду, чтобы добавить где положение в ней вместо группы по ? – GurV

ответ

0

Это правильно. У вас есть group by, который обычно возвращает несколько строк. Предположительно вы намерены подсчитать количество строк только для trans_id предоставленного в качестве аргумента хранимой процедуры:

CREATE PROCEDURE insertp_detail (
    IN in_purchase_id char(4), 
    IN in_seat_id char(2), 
    IN in_trans_id char(4), 
    IN in_seat_type varchar(5) 
) 
BEGIN 
    IF ((SELECT COUNT(*) 
     FROM purchase_detail 
     WHERE pd.trans_id = in_trans_id 
     ) < 3) 
    THEN 
     INSERT INTO purchase_detail 
      VALUES (in_purchase_id, in_seat_id, in_trans_id, in_seat_type); 
    END IF; 
END; 

Обратите внимание, что параметры хранимой процедуры имеют префиксы, чтобы отличить их от имен столбцов.

Вы также должны указать столбцы для purchase_detail для заявления INSERT.

+0

Я просто новый ученик в базе данных, спасибо за помощь! –

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

  • Нет связанных вопросов^_^