具有 table 个字段的过程调用函数

Procedure call function with table fields

如何在具有 table 字段的过程中调用函数?

问题How to call a stored procedure using table data我看过了,但是不一样

我有一个功能:

CREATE FUNCTION valorPedido (qtde int, decimal value (11.2)) RETURNS double
BEGIN
 RETURN qtde * value;
END

我有程序 ItemPedido:

CREATE PROCEDURE ItemPedido (numped int, int codtab, codpro int (4), qtdped int, decimal valitem (11.2), decimal valped (11.2), datped date)
BEGIN
insert into itens_pedido (numped, codtab, codpro, qtdped, valitem, valped, datped) values ​​(numped, codtab, codpro, qtdped, valitem, valped, datped);
END

还有一个 table 叫做 itens_Pedido:

IdItemPedido int (11) AI PK
NumPed int (11)
CodTab int (11)
CodPro int (4)
QtdPed int (11)
ValItem decimal (11.2)
ValPed decimal (11.2)
DatPed date

我想这样调用程序:

call ItemPedido (1, 99, 1, 10, 4, valorPedido (qtdped, valitem), sysdate());

错误代码:1054。'field list'

中的未知列 'qtdped'

但我只能这样:

call ItemPedido (1, 99, 1, 10, 4, valorPedido (10, 4), sysdate());

你可以这样做;

从 sp 中删除 valped 参数并使用函数计算在行插入后更新 table。

CREATE PROCEDURE ItemPedido (numped int, int codtab, codpro int (4), qtdped int, decimal valitem (11.2),  datped date)
    BEGIN

    insert into itens_pedido (numped, codtab, codpro, qtdped, valitem, datped) 
values ​​(numped, codtab, codpro, qtdped, valitem, datped);

set @lastId=LAST_INSERT_ID();

    set @valped= (select valorPedido(qtdped,valitem) from  itens_pedido where AI =@lastId);

update itens_pedido set valped=@valped where AI=@lastId;

    END