我正在尝试在Postgresql 12中创建一个SP:
CREATE OR REPLACE PROCEDURE trans_buy(
_name_client varchar(25),
_id_product smallint,
_mount smallint
)
LANGUAGE plpgsql
AS
$$
BEGIN
INSERT INTO invoices (cliente) VALUES(_name_client);
INSERT INTO invoices_details (id_invoice, id_product, mount) VALUES (1, _id_product, _mount, 100);
END
$$
但是当我试着这样调用这个sp时:
CALL trans_buy('james', 3, 10)
我收到此错误消息:
不存在存储过程〈〈trans_buy(unknown,integer,integer)〉〉
提示:没有过程与参数的名称和类型匹配。可能需要添加显式类型转换。
1条答案
按热度按时间kxkpmulp1#
您可能需要将整数值显式转换为
smallint
s:我假设
invoice_details
中的目标列也是smallint
,另一种方法是让该过程接受int
s,并在insert
时间强制转换:注意你的第二次插入有3列4个值。我(试图)调整它。
还需要强调的是,在Postgres中并不需要使用子查询来完成这一操作,您可以使用common-table-expressions在一个查询中运行多个DML操作: