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

Attiva la selezione dei record secondari, la moltiplicazione dei loro valori e l'aggiornamento del record principale

Hai diversi problemi, ma il più fondamentale è che non dovresti farlo affatto. Cercare di memorizzare - e mantenere sincronizzato - un valore che può essere sempre calcolato è un difetto di progettazione fondamentale.

Ora, al codice stesso. Hai

SELECT SUM(VALUE) into product

La destinazione del tuo INTO deve essere una variabile dichiarata. Sembra che tu stia provando a SELECT .. INTO un nome di colonna.

Dovresti nominare le variabili locali per distinguere tra loro i nomi di una colonna. Quindi, invece di

DECLARE
value number;
amount number;
total number;

Dovresti averlo

DECLARE
v_value number;
v_amount number;
v_total number;

Al contrario, dovresti pensare alle convenzioni di denominazione standard per le tabelle e le colonne. Per le colonne utilizzo e consiglio nomi sotto forma di , quindi ORDER_ID, PRODUCT_NAME, ecc. Che cos'è questo con PRODUCT_ID_PRODUCT, ORDER_ID_ORDER ? La ripetizione del nome della tabella nei nomi delle colonne in genere non è vantaggiosa. Anche se ci sono momenti ha senso perché segue ancora il formato aggettivo_nome, come la colonna id della tabella ORDERS chiamata ORDER_ID. Pensa anche ai nomi delle tabelle, di solito rendo i nomi delle mie tabelle un sostantivo plurale perché le tabelle tracciano più istanze di qualche entità. Se il nome della tabella ha senso per un nome di colonna (come ORDER_ID) sarebbe singolare, perché una singola riga tiene traccia di una singola istanza dell'entità.

Infine, è difficile consigliare la modifica della codifica senza conoscere le tabelle. Ne hai dato una vaga descrizione, ma meglio mettere tutto sul tavolo. Vedi minimal-reproducible-example