SQL no evento onAfterUpdate não atualiza várias linhas de outra tabela

Criei uma grid para listar relatórios de pedidos feitos por usuários de um portal. Estes pedidos estão armazenados numa tabela chamada psd_pedidos, com os seguintes campos:

pedido_id
pedido_data
pedido_data_hora
pedido_valor
pedido_status

Esta tabela está como chave estrangeira de outra, chamada psd_itens, no campo pedido_id, que armazena os itens do pedido com a seguinte estrutura:
itens_id
pedido_id
itens_id_produto
itens_produto
itens_quantidade
itens_valor_produto
itens_total

Criei um formulário que o usuário chama a partir da referida grid com o resultado dos pedidos, para atualizar o status dele. Isso sem problemas. Meu desejo é que ele, no momento que mudasse o status do pedido, fizesse simultaneamente a atualização da quantidade do produto que está numa tabela chamada psd_produtos. Esta tabela, chamada psd_produtos, possui o campo prd_id, cujo valor é repassado no momento da inserção dos itens do pedido, para a tabela psd_itens no campo itens_id_produto. Junto com este identificador do produto nessa mesma tabela é inserida a quantidade dele que foi comprada no campo itens_quantidade, que desejo utilizar no SQL para atualizar o campo prd_estoque, reduzindo dele na atualização quantidade comprada.

Para fazer a atualização que desejo, estou tentando usar no evento onAfterUpdate
a macro sc_exec_sql com a seguinte SQL:

sc_exec_sql (
"
Update psd_produtos
SET prd_estoque = prd_estoque - (Select itens_quantidade FROM psd_itens WHERE pedido_id = {pedido_id})
WHERE
prd_id IN (Select itens_id_produto FROM psd_itens WHERE pedido_id = {pedido_id})

",
"cnx ");
E aqui está meu problema: não estou conseguindo fazer a construção adequada. Ao tentar fazer a atualização do campo prd_estoque, o scriptcase me retorna a seguinte mensagem: Erro ao acessar o banco de dados. Subquery returns more than 1 row. Ou seja, ele dá erro por que a subconsulta retorna mais que uma linha (e é isso mesmo, pois há pedidos com mais do que um item). Como contorno esse problema?

aplique a macro sc_commit_trans() no final do código do evento em questão.

1 Curtida