当我尝试使用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 :(得分: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
列。