2013-02-08 111 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