Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    48

    PLSQL Update tramite cursor

    Salve a tutti,
    Sto avendo difficoltà con questa procedura, costruendo un cursore dal join di 2 tabelle, prelevo solo i determinati dati e dovrei aggiornare il "Prezzo" (calcolandone il 50%) di quest'ultimi.
    La procedura viene eseguita correttamente senza errori ma mi aggiorna tutti i dati e non calcola con precisione il 50%.
    Sicuramente ci saranno errori stupidi ma essendo alle prime armi non riesco ad uscirne.
    GRAZIE!

    codice:
    create or replace procedure P_12Mesi
    as
    
    cursor c2 is 
    select * from Ordine join Attivita
    on Ordine.ID_Cliente = Attivita.ID_Cliente
    for update of Prezzo;
    Sconto c2%rowtype;
    
    BEGIN
    open c2;
    loop
    fetch c2 into Sconto;
    exit when c2%notfound;
    if Sconto.Mesi_da_ultimo_ordine > 11 then
        update Ordine set Prezzo = (Prezzo/100)*50;
        dbms_output.put_line('Prezzo scontato');
    end if;
    end loop;
    close c2;
    end;
    /

  2. #2
    perché un cursore? dovresti riuscire a fare una update con una where...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    48
    Grazie Optime per il consiglio.
    Approfitto chiedendoti un aiuto su questo "tentativo" di update tramite where.
    Purtroppo la procedura non viene eseguita e mi da errore "ATTIVITA"."MESI_DA_ULTIMO_ORDINE": invalid identifier"
    Immagino sia un errore di sintassi perchè teoricamente credo di aver scritto correttamente le varie operazioni...

    Eseguo un join delle 2 tabelle Ordine e Attività e modifico il Prezzo solo dove il valore Mesi_da_ultimo_ordine è maggiore di 11.

    Grazie!

    codice:
    create or replace procedure P_12Mesi
    as
    
    BEGIN
    update (select * from Ordine join Attivita 
    on Ordine.ID_Cliente = Attivita.ID_Cliente)
    set Prezzo = Prezzo/2
    where Attivita.Mesi_da_ultimo_ordine > 11;
    dbms_output.put_line('Prezzo scontato');
    end;
    /

  4. #4
    ti scrivo la query generica

    update t1 set colonna=valore
    from tabella1 t1 join tabella2 t2 on t1.colonna=t2.colonna_corrispondente_a_tabella1
    where ...condizione...

    adattala al tuo caso

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    48
    Ciao Optima, stasera sto facendo qualche tentativo e sto provando cosi:

    codice:
    create or replace procedure P_12Mesi
    is
    
    BEGIN
    update Ordine
    set Prezzo = Prezzo/2
    from Ordine join Attivita 
    on Ordine.ID_Cliente = Attivita.ID_Cliente
    where Attivita.Mesi_da_ultimo_ordine > 11;
    dbms_output.put_line('Prezzo scontato');
    end;
    /
    Il risultato è questo errore: ORA-00933: SQL command not properly ended

    Purtroppo l'errore è sicuramente nel join delle 2 tabelle Ordine e Attivita perchè eseguendo un normale update, su una tabella, senza join con questa sequenza di operazioni, funziona perfettamente (comprendo anche che in effetti è una procedura semplice ).

  6. #6
    fantastico! Oracle non supporta le UPDATE JOIN vedi qui http://stackoverflow.com/questions/2...ith-inner-join ci sono degli esempi


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.