Originariamente inviato da drakko90
salve a tutti ho un piccolo problema per il progetto per l'esame di base di dati.
ora vi spiego sto creando un database per la gestione di magazzino di una libreria
nella tabella movimenti ho i campi(N_mov, data,prezzo_tot)
in pratica ho bisogno di calcolare il prezzo totale e metterlo direttamente nel campo prezzo_tot.
le tabelle che uso sono libro(isbn, titolo,prezzo)
dettagli mov(cod_art, n_mov, quantita)
la mia idea era questa:

update movimenti
set prezzo_tot(select libro.prezzo * dettagli_mov.quantita
from libro join dettagli_mov on libro.isbn=dettagli_mov.cod_art)
where=?

oppure
CREATE OR REPLACE TRIGGER T5
BEFORE INSERT ON MOVIMENTI
FOR EACH ROW

DECLARE
CURSOR C1 IS SELECT PREZZO
FROM LIBRO;
CURSOR C2 IS SELECT QUANTITA_MOV
FROM DETTAGLI_MOV;

PR NUMBER(8,2);
QU NUMBER(5);
TOT NUMBER(8,2);

BEGIN
OPEN C1;
OPEN C2;
FETCH C1 INTO PR;
FETCH C2 INTO QU;
WHILE C1%FOUND LOOP
WHILE C2%FOUND LOOP

UPDATE MOVIMENTI
SET PREZZO_MOV=PR*QU
WHEN PREZZO_MOV=0;

FETCH C1 INTO PR;
FETCH C2 INTO QU;
END LOOP;
END LOOP;
END;

ma anche in questo caso non funziona

ho già provato in tutti i modi ma non so come farlo funzionare ho anche provato a fare una procedura o un trigger ma non va.
qualcuno per favore può aiutarmi a trovare la soluzione.
grazie mille
Per prima cosa i campi totalizzati non dovrebbero essere salvati a DB ma ricalcolati mediante viste o query specifiche, perché poi se li salvi devi anche manutenerli.

L'update che hai scritto mi sembra corretta, l'unica cosa non relazione la tabella movimenti e quella dei dettagli (manca nella sub query una condizione del tipo movimenti.id = dettagli_mov.fk_movimento)

Nella where esterna metti una condizione in base a ciò che vuoi filtrare. Vuoi aggiornare solo un movimento? O tutti? dipende da te.