2012-08-13 3 views
3

난 당신이 내가 번호 (38로 포맷이 열을 채우는하고 있음을 볼 수있다, 그러나오라클 삽입 돌아 ORA-01400

SQL Error: ORA-01400: cannot insert NULL into ("CRABERS"."AG_ASSET_REF"."CREATE_ID").

를 반환하는 오라클 11g DB에 다음과 같은 SQL을 시도하고, 0). 가치를 삽입 할 때 왜 내가 ORA-01400을받을 수 있습니까? 당신의 오류가 나타납니다이 트리거로

INSERT INTO ag_asset_ref 
      (asset_type_id, 
      create_id, 
      create_date, 
      file_size, 
      bus_unit_id, 
      status, 
      name) 
VALUES  (1050, 
      2458, 
      SYSDATE, 
      50000, 
      1000, 
      0, 
      'test insert') 
+7

해당 테이블에서 실행되는 트리거가 있습니까? –

+0

트리거? 트리거가 어떻게 테이블 자체를 참조 할 수 있습니까? 'ag_asset_ref'에 대한 트리거 였고이 테이블을 트리거 내부에서 참조해야한다면, 그 트리거링 오류가 발생해서는 안됩니까? (OP가 11g를 사용하고 있기 때문에 OPTIONS가 'compound'트리거가 아닌 한) – Annjawn

+0

@Annjawn은 트리거가 테이블을 "참조"하지 않고 * 테이블 위에 있습니다. 예 : 아래의 Jeff의 예제에서와 같이,'BEFORE INSERT' 트리거는 테이블에 삽입하려고 시도 할 때마다 실행될'ag_asset_ref' 테이블에 정의 될 수 있습니다. 이것은'BEFORE' 트리거이기 때문에 삽입 된 실제 값을 변경하여 초기 insert 문에서 제공된 값을 무시할 수 있습니다. –

답변

2

:

CREATE TRIGGER t_ag_asset_ref BEFORE INSERT OR UPDATE ON ag_asset_ref 
FOR EACH ROW 
BEGIN 
    :NEW.create_id := NULL; 
END; 

당신의 경우는 아마 그렇게 간단하지 않지만 트리거 확실히 원인이 될 수 있습니다.