Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclencher la sélection des enregistrements enfants, multiplier leurs valeurs et mettre à jour l'enregistrement parent

Vous avez plusieurs problèmes, mais le plus fondamental est que vous ne devriez pas faire cela du tout. Essayer de stocker - et de rester synchronisée - une valeur qui peut toujours être calculée est un défaut de conception fondamental.

Passons maintenant au code lui-même. Vous avez

SELECT SUM(VALUE) into product

La cible de votre INTO doit être une variable déclarée. On dirait que vous essayez de SELECT .. INTO un nom de colonne.

Vous devez nommer les variables locales pour les distinguer des noms de colonne. Ainsi, au lieu de

DECLARE
value number;
amount number;
total number;

Vous devriez avoir

DECLARE
v_value number;
v_amount number;
v_total number;

Inversement, vous devriez penser aux conventions de nommage standard pour vos tables et colonnes. Pour les colonnes, j'utilise et recommande des noms sous la forme , donc ORDER_ID, PRODUCT_NAME, etc. Qu'est-ce que c'est avec PRODUCT_ID_PRODUCT, ORDER_ID_ORDER ? Répéter le nom de la table dans les noms de colonne n'est généralement pas avantageux. Bien qu'il y ait des moments où cela a du sens car il suit toujours le format adjectif_noun, comme la colonne id de la table ORDERS étant nommée ORDER_ID. Pensez également aux noms de table, je fais généralement de mes noms de table un nom au pluriel car les tables suivent plusieurs instances d'une entité. Si le nom de la table a un sens pour un nom de colonne (comme ORDER_ID), il serait singulier, car une ligne individuelle suit une seule instance de l'entité.

Enfin, il est difficile de recommander une modification de codage sans connaître les tables. Vous en avez donné une vague description, mais mieux vaut tout mettre sur la table. Voir minimal-reproducible-example