2013-02-08 153 views
5

我有兩個表。我想在car表上創建一個觸發器,它將根據一定的值在fuel表上插入或刪除。PostgreSQL觸發插入或更新

汽車

id - SERIAL 
fuel - BOOLEAN 

燃料

car_id - INTEGER 

我不包括任何行數據作爲觸發的描述並不需要它。

基本上,我想在Car表創建一個觸發器:在插入或更新

  • 上運行。
  • 如果Car.fuel is true插入Car.idFuel表。
  • 如果是Car.fuel is false,觸發器應刪除Fuel表中的所有行,其中Fuel.car_id = Car.id

我該怎麼做?

編輯:爲了澄清,我使用的是Postgres

+0

參考http://plsql-tutorial.com/plsql-triggers.htm – asifsid88 2013-02-08 12:10:21

+1

我一直認爲PSQL是Postgres的標識符。不過啊,我使用的是Postgres :) – Ozzy 2013-02-08 17:15:23

+0

'psql'大多爲短Postgres,這是真的。但是它也可能是一個意思錯誤,意思是「PL/PSQL」(這是Oracle的過程語言)。 Postgres的過程語言被稱爲「PL/pgSQL」 – 2013-02-08 17:21:25

回答

5

因爲你沒有提到的RDBMS,我認爲它是Oracle。以下是觸發器。如果您正在使用其他RDBMS,請調整代碼以符合語法。

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

我不認爲'IF:new.FUEL THEN'將在Oracle中工作,因爲它沒有BOOLEAN ** SQL **數據類型(只有PL/SQL有)。所以':NEW'記錄不能有一個布爾列。我實際上認爲Ozzy使用的是Postgres('psql'是Postgres的命令行工具) – 2013-02-08 13:29:06