2013-02-08 2 views
5

두 개의 테이블이 있습니다. 특정 값에 따라 fuel 테이블에서 삽입 또는 삭제할 car 테이블에 트리거를 만들려고합니다.삽입 또는 업데이트시 PostgreSQL 트리거

자동차

car_id - INTEGER 

나는 그것을 필요로하지 않는다 트리거의 설명과 같은 임의의 행 데이터를 포함하고 있지 않다

id - SERIAL 
fuel - BOOLEAN 

연료.

는 기본적으로, 나는 Car 테이블에 트리거를 만들려면 그 : 삽입 또는 업데이트에

  • 실행됩니다.
  • Car.fuel is true 인 경우 Car.idFuel 테이블에 삽입합니다.
  • Car.fuel is false 인 경우 Fuel.car_id = Car.idFuel 테이블의 모든 행을 삭제해야합니다.

어떻게하면됩니까?

편집 : 당신이 RDBMS를 언급하지 않았으므로 나는 포스트 그레스

+0

는 참조 http://plsql-tutorial.com/plsql-triggers.htm – asifsid88

+1

나는 항상 PSQL이 .. 포스트 그레스의 식별자이었다 그러나 참으로 내가 사용하고 포스트 그레스 : – Ozzy

+0

는'psql'가 대부분 짧은 가정 Postgres, 사실입니다. 하지만 오라클의 절차 언어 인 'PL/PSQL'을 의미하는 오타가 될 수도 있습니다. Postgres의 절차 언어는'PL/pgSQL'입니다. –

답변

5

을 사용하고 명확히하기 위해, 나는 그것이 오라클 가정. 아래는 방아쇠입니다. 다른 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의 명령 행 도구입니다) –

관련 문제