[Oracle] PL/SQL: Update di righe tramite Query

Rispondi
Roberto
Amministratore
Messaggi: 160
Iscritto il: 19/12/2009, 19:30

[Oracle] PL/SQL: Update di righe tramite Query

Messaggio da Roberto »

Vediamo adesso come sia possibile effettuare un Update di righe ricevute tramite Query. Supponiamo di voler cercare il manager di una specifica area per aggiornare il suo livello contrattuale:

Codice: Seleziona tutto

CREATE OR REPLACE PROCEDURE updatingRows(id_area IN NUMBER, livelloContratto IN NUMBER) AS
    dip_count NUMBER := 0;
    dip roberto.dipendente%ROWTYPE;
    area_nome roberto.area.nome%TYPE;
BEGIN
    SELECT COUNT(*)
    INTO dip_count
    FROM dipendente
    WHERE area = id_area;
    
    IF dip_count = 1 THEN
    
        SELECT *
        INTO dip
        FROM dipendente
        WHERE area = id_area;
        
        IF dip.livello_contratto != livelloContratto THEN
        
            dip.livello_contratto := livelloContratto;
            
            UPDATE dipendente
            SET ROW = dip
            WHERE area = id_area;
            
            SELECT nome
            INTO area_nome
            FROM area
            WHERE id_area = updatingRows.id_area;
            DBMS_OUTPUT.PUT_LINE('Il manager ' || dip.cognome || ' adesso ha un contratto di livello ' || updatingRows.livelloContratto);
        ELSE
            DBMS_OUTPUT.PUT_LINE('Il manager ' || dip.cognome || ' ha gia'' un contratto di livello ' || updatingRows.livelloContratto);
        END IF;
    ELSIF dip_count > 1 THEN
        DBMS_OUTPUT.PUT_LINE('Per questa Area sono associati piu'' manager');
    ELSE
        DBMS_OUTPUT.PUT_LINE('Non ci sono manager associati a questa Area');
    END IF;
END;
Come si evince da questo esempio è possibile effettuare questa operazione utilizzando il comando UPDATE...SET ROW che permette dunque di effettuare l'update di righe intere.

Roberto Basile
Rispondi