sql >> Database teknologi >  >> RDS >> Oracle

Udløs valg af underordnede poster, multiplicering af deres værdier og opdatering af overordnet post

Du har flere problemer, men den mest grundlæggende er, at du slet ikke skal gøre dette. At forsøge at gemme - og holde synkroniseret - en værdi, der altid kan beregnes, er en grundlæggende designfejl.

Nu til selve koden. Du har

SELECT SUM(VALUE) into product

Målet for din INTO skal være en erklæret variabel. Det ser ud til, at du prøver at VÆLGE .. I et kolonnenavn.

Du bør navngive lokale variabler for at skelne mellem dem og kolonnenavne. Altså i stedet for

DECLARE
value number;
amount number;
total number;

Du burde have

DECLARE
v_value number;
v_amount number;
v_total number;

Omvendt bør du tænke på standardnavnekonventioner for dine tabeller og kolonner. Til kolonner bruger og anbefaler jeg navne i form af , således ORDER_ID, PRODUCT_NAME osv. Hvad er det her med PRODUCT_ID_PRODUCT, ORDER_ID_ORDER ? Det er normalt ikke fordelagtigt at gentage tabelnavnet i kolonnenavnene. Selvom der er tidspunkter, giver det mening, fordi det stadig følger adjective_noun-formatet, som id-kolonnen i ORDERS-tabellen, der hedder ORDER_ID. Tænk også på tabelnavne, jeg plejer at gøre mine tabelnavne til et substantiv i flertal, fordi tabeller sporer flere forekomster af en entitet. Hvis tabelnavnet giver mening for et kolonnenavn (som ORDER_ID), ville det være ental, fordi en individuel række sporer en enkelt forekomst af entiteten.

Endelig er det svært at anbefale kodningsændring uden at kende tabellerne. Du har givet en vag beskrivelse af dem, men bedre at lægge alt på bordet. Se minimal-reproducerbart-eksempel



  1. Hvorfor er null lig med heltal i WHERE?

  2. IN-klausul i mysql nodejs

  3. kunne ikke importere utf16-kodet fil til mysql

  4. Split funktion i oracle til kommaseparerede værdier med automatisk sekvens