2017-02-04 13 views
-1

當我嘗試調用的程序與call insertp_detail ('P005','02','T001','CAT2'),它會顯示錯誤:無法調用的程序

SQL0811N標量全查詢的結果,SELECT INTO語句,或 VALUES 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) FROM purchase_detail GROUP BY trans_id)'它返回多行 - 您是否想要在其中添加where子句而不是 ? – 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

我只是一個新的學習數據庫,感謝您幫助! –