2013-02-08 14 views
5

Ho due tabelle. Voglio creare un trigger sulla tabella car che inserirà o eliminerà nella tabella fuel in base a un determinato valore.PostgreSQL Trigger su Insert o Update

auto

id - SERIAL 
fuel - BOOLEAN 

combustibile

car_id - INTEGER 

non sto compresi quelli di fila come la descrizione del grilletto non ne ha bisogno.

Fondamentalmente, voglio creare un trigger nella tabella Car che:

  • Viene eseguito su un inserimento o aggiornamento.
  • Inserisce Car.id nella tabella Fuel se Car.fuel is true.
  • Se Car.fuel is false, il trigger deve eliminare tutte le righe nella tabella Fuel dove Fuel.car_id = Car.id.

Come faccio?

EDIT: Per chiarire Sto usando Postgres

+0

consultare http://plsql-tutorial.com/plsql-triggers.htm – asifsid88

+1

Ho sempre pensato PSQL era l'identificatore per Postgres .. Ma sì sto usando Postgres :) – Ozzy

+0

'psql' è per lo più l'abbreviazione di Postgres, è vero. Ma potrebbe anche essere un errore di battitura che significa 'PL/PSQL' (che è il linguaggio procedurale di Oracle). Il linguaggio procedurale di Postgres è chiamato 'PL/pgSQL' –

risposta

5

Dal momento che non hai citato i RDBMS, suppongo che sia Oracle. Di seguito è il grilletto. Se si utilizza un altro RDBMS, modificare il codice per adattarlo alla sintassi.

CREATE OR REPLACE TRIGGER TRG_CAR 
    AFTER INSERT OR UPDATE ON CAR 
    FOR EACH ROW 

    BEGIN 

    IF :new.FUEL THEN 
     INSERT INTO FUEL (CAR_ID) VALUES (:new.ID); 
    ELSE 
     DELETE FROM FUEL WHERE CAR_ID = :new.ID; 
    END IF; 
    END; 
+0

Non penso che 'IF: new.FUEL THEN' funzionerà in Oracle poiché non ha un tipo di dati BOOLEAN ** SQL ** (solo PL/SQL ha). Quindi il record ': NEW' non può avere una colonna booleana. In realtà penso che Ozzy stia usando Postgres ('psql' è lo strumento da riga di comando di Postgres) –

Problemi correlati