Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Trigger per Update

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    46

    Trigger per Update

    Ciao tutti! vi chiedo un immenso aiuto. devo fare un trigger per gestire il seguente aspetto:

    SE SI TENTA DI MODIFICARE IL NUMERO DI CAMERE DISPONIBILI DI UN HOTEL CON UN NUMERO
    SUPERIORE ALLA DISPONIBILITA' EFFETTIVA, LA PROCEDURA SI ARRESTA CON UN'ECCEZZIONE.

    Ad esempio se faccio:
    codice:
    UPDATE hotel SET disponibilita=disponibilita-500 WHERE nome='Cristallo'
    e la disponibilità è minore di 500 mi dovrebbe dare una eccezzione.

    Tabella HOTEL:

    codice:
    CREATE TABLE HOTEL
    (CODICE NUMERIC (7) NOT NULL,
     NOME VARCHAR (50),
     CAMERE NUMERIC (5),
     DISPONIBILITA NUMERIC (5),
     PREZZO NUMERIC (10),
     CATEGORIA NUMERIC (2) NOT NULL,
     PRIMARY KEY (CODICE),
     FOREIGN KEY (CODICE) REFERENCES STRUTTURE_TURISTICHE
     ON DELETE CASCADE ON UPDATE CASCADE
    );
    Ho provato in questo modo, ma ovviamente non funziona:

    codice:
    
    CREATE FUNCTION disponibilita() RETURNS trigger AS $disponibilita$ 
      BEGIN
        IF NEW.disponibilita<0 THEN
          RAISE EXCEPTION 'Disponibilità insufficente';
          RETURN NULL;
        ELSE UPDATE hotel SET disponibilita=NEW.disponibilita WHERE codice = NEW.codice;
          RETURN NEW;
        END IF;
       END; 
    $disponibilita$ LANGUAGE plpgsql;
    
    CREATE TRIGGER GESTIONE_HOTEL BEFORE UPDATE ON HOTEL FOR EACH ROW EXECUTE PROCEDURE disponibilita ();

    ....scusate ma non sono molto pratico di trigger è solo che mi serve per un progetto all'uni!
    Vi ringrazio anticipatamente

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    46
    update sul problema: il trigger non da errori quando caricato nel database pgSQL v8.1.4 e eseguendo questa query ritorna un errore (perchè la disponibilita residua scende sotto zero):

    codice:
    UPDATE hotel SET disponibilita=disponibilita-500 WHERE nome='Cristallo'
    Eseguendo invece la stessa con parametro corretto l'unico risultato è una sfilza di errori:

    codice:
    UPDATE hotel SET disponibilita=disponibilita+500 WHERE nome='Cristallo'
    ERROR: stack depth limit exceeded
    HINT: Increase the configuration parameter "max_stack_depth".
    CONTEXT: SQL statement "UPDATE hotel SET disponibilita= $1 WHERE codice = $2 "
    PL/pgSQL function "disponibilita" line 5 at SQL statement
    SQL statement "UPDATE hotel SET disponibilita= $1 WHERE codice = $2 "
    PL/pgSQL function "disponibilita" line 5 at SQL statement

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.