2017-12-20 21 views
0

oracle db에서 조건을 작성하는 방법은 무엇입니까? 나는이 DB에 대해 새로운 사람이다. 는 이미 vehicle_parked라는 테이블을 만들 수 있지만 parkedOnSite 값이 'F'이며,이oracledb에서 조건을 만드는 방법은 무엇입니까?

같은 구조가

- parked_id number(4) PK 
- arrivalTime date 
- parkedOnSite varchar(1) // value will be T/F 
- vehicle_number varchar(8) 

감사를 vehicle_parked 경우 내가 NULL로 차량 번호를 트리거합니다.

+0

는 동일한 또는 업데이트 문에 대한 트리거를 원하는? –

+0

플래그가 F 인 경우 삽입/업데이트시 차량 번호를 자동으로 null로 설정하는 트리거를 만들려고합니까? 또는 사용자가 Null이 아닌 값을 만들려고 시도하는 것을 막기위한 check 제약 조건 (플래그가 T 인 경우 역으로 null 값)? 또는 플래그가 F 인 경우 테이블을 쿼리 할 때 null이 아닌 값을 바꿉니 까? 이미 얼마나 멀리있어? –

+0

@AlexPoole 예, 플래그가 F이면 차량 번호를 자동으로 null로 설정하는 트리거를 만들고 싶습니다. 그러나 차량 번호 – sekti92

답변

1

데이터가 테이블에 삽입되고 데이터가 변경되기 전에 실행되는 DML trigger을 생성하여 데이터를 쉽게 조작 할 수 있습니다.

트리거에서
CREATE OR REPLACE TRIGGER trg_vehicle_parked 
BEFORE INSERT OR UPDATE 
    ON vehicle_parked 
    FOR EACH ROW  
DECLARE 

BEGIN 
    if :new.parkedOnSite = 'F' then 
    :new.vehicle_number := null; 
    end if; 
END; 
/

, :new 게다가, 우리는 :old 의사 코드를 사용할 수 있습니다. 이들은 DML 문이 발행되기 전에 (:old) 또는 (:new) 이후의 열 값을 나타냅니다. 특히 당신이 예에서와 같이 트리거에 열의 이전 및 새 값을 비교할 수있는 update 또는 delete 트리거 : 그래서

if (nvl(:old.vehicle_number,0) != nvl(:new.vehicle_number,0)) then 
    go_on_with_statement .... 
+0

@ sekti92 오케이, 나는 서두를 때 잘못 읽었다. –