2013-02-08 7 views
5

私は2つのテーブルを持っています。特定の値に応じてfuelテーブルに挿入または削除するテーブルcarのトリガーを作成したいと思います。PostgreSQLの挿入または更新時のトリガー

カー

id - SERIAL 
fuel - BOOLEAN 

燃料

car_id - INTEGER 

トリガーの説明は、それを必要としないように私は、任意の行データを含めておりません。

は基本的に、私はCarテーブルにトリガーを作成したいこと:挿入または更新の

  • 実行します。
  • の場合はCar.idFuelに挿入します。
  • Car.fuel is falseの場合、Fuel.car_id = Car.idFuelテーブルのすべての行が削除されます。

どうすればよいですか?

EDITは:あなたはRDBMSを言及していないので、私はPostgresの

+0

は、私はいつもPSQLは... Postgresのための識別子だったが、いや、私はpostgresのを使用しています:) – asifsid88

+1

を参照してください。 Postgres、それは本当です。しかし、PL/PSQL(Oracleの手続き型言語)を意味するタイプミスでもあります。 Postgresの手続き型言語は 'PL/pgSQL'と呼ばれます – Ozzy

+0

'psql'がために、主に短期であると仮定http://plsql-tutorial.com/plsql-triggers.htm –

答えて

5

を使用しています明確にするために、私はそれは、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はBOOLEAN ** SQL **データ型を持たないため、Oracleでは機能しません(PL/SQLのみ)。したがって、 ':NEW'レコードはブール値の列を持つことはできません。私は実際にOzzyがPostgresを使っていると思っています( 'psql'はPostgresのコマンドラインツールです) –

関連する問題