Visualizzazione dei risultati da 1 a 2 su 2

Discussione: aiuto oracle

  1. #1

    update oracle

    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

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: update oracle

    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.