无法呼叫程序

时间:2017-02-04 16:56:29

标签: sql db2

当我尝试使用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

1 个答案:

答案 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列。