2017-12-13 23 views
0

이 스크립트가 있습니다. 기본적으로 테이블의 기본 키 중 하나를 늘립니다. SQLPLUS (cmd를) 실행하면PLS-00103 : 시퀀스 번호 oracle에 대한 트리거 생성

CREATE OR REPLACE FORCE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ 
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA 
FOR EACH ROW 
DECLARE 
    m_next_seq_num NUMBER := 0; 
BEGIN 
    IF :new.SEQUENCE_NUMBER is null THEN 
    select 
     ADV_SN_MAP_UNIT_RELA_SEQ.NextVal 
    into m_next_seq_num 
    from dual; 
    :new.SEQUENCE_NUMBER := m_next_seq_num; 
    END IF; 
END; 

, 내가 가지고 :

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
2/28  PLS-00103: Encountered the symbol "end-of-file" when expecting 
    one of the following: 
    * & = - + ; </> at in is mod remainder not rem 
    <an exponent (**)> <> or != or ~= >= <= <> and or like like2 
    like4 likec between || multiset member submultiset 

확실하지 정확하게 오류가 무엇입니까?

+0

트리거 끝에 "/"와 같은 구분 기호 중 하나를 유지하십시오. – Rams

답변

0

키워드 FORCE을 삭제하십시오. 이 옵션은 트리거에는 없습니다. (I 원하는 있지만 그것은 한 - 테이블 또는 순서가 존재하기 전에 때때로 트리거를 만드는 것이 좋을 것이다.)

enter image description here

1

당신이 데이터베이스 버전 11g 이상이있는 경우. 그런 다음 코드를 단순화하고 생산성을 높이는 새로운 기능을 사용하십시오.

CREATE OR REPLACE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ 
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA 
FOR EACH ROW 
DECLARE 

BEGIN 
    IF :new.SEQUENCE_NUMBER is null THEN 
    :new.SEQUENCE_NUMBER := ADV_SN_MAP_UNIT_RELA_SEQ.NextVal; 
    END IF; 
END;