Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Acionar a seleção de registros filhos, multiplicando seus valores e atualizando o registro pai


Você tem vários problemas, mas o mais fundamental é que você não deveria estar fazendo isso. Tentar armazenar - e manter em sincronia - um valor que sempre pode ser calculado é uma falha fundamental de projeto.

Agora, para o próprio código. Você tem
SELECT SUM(VALUE) into product

O destino do seu INTO deve ser uma variável declarada. Parece que você está tentando SELECT .. INTO em um nome de coluna.

Você deve nomear variáveis ​​locais para distinguir entre elas os nomes das colunas. Assim, em vez de
DECLARE
value number;
amount number;
total number;

Você devia ter
DECLARE
v_value number;
v_amount number;
v_total number;

Por outro lado, você deve pensar nas convenções de nomenclatura padrão para suas tabelas e colunas. Para colunas, uso e recomendo nomes na forma de , portanto ORDER_ID, PRODUCT_NAME etc. O que é isso com PRODUCT_ID_PRODUCT, ORDER_ID_ORDER ? Repetir o nome da tabela nos nomes das colunas geralmente não é benéfico. Embora às vezes isso faça sentido porque ainda segue o formato adjetivo_substantivo, como a coluna id da tabela ORDERS sendo denominada ORDER_ID. Pense também em nomes de tabelas, eu costumo fazer meus nomes de tabelas um substantivo plural porque as tabelas rastreiam várias instâncias de alguma entidade. Se o nome da tabela fizer sentido para um nome de coluna (como ORDER_ID), ele será singular, porque uma linha individual rastreia uma única instância da entidade.

Por fim, é difícil recomendar a modificação da codificação sem conhecer as tabelas. Você deu uma descrição vaga deles, mas é melhor colocar tudo na mesa. Consulte minimal-reproducible-example