안녕하세요 오라클에서 아래와 같은 트리거를 생성하는데 오류가 발생합니다 고수님들의 조언 부탁드립니다.
CREATE OR REPLACE TRIGGER TB_00002310_TRIGGER_INS_01
AFTER INSERT ON TB_INFO_PACM_00001000
DECLARE
V_SQL_CODE VARCHAR2(255) :='';
V_SQL_ERRMSG VARCHA2(255) :='';
BEGIN
INSERT INTO TB_INFO_PACM_00002310
( PLC_ID
,REG_NM
,REG_DT
,CHANG_NM
,CHANG_DT
)
VALUES ( PLC_ID_SEQ.NEXTVAL
,:OLD.REG_NM
,:OLD.REG_DT
,:OLD.CHANG_NM
,:OLD.CHANG_DT
)
;
EXCEPTION WHEN OTHERS THEN
V_SQL_CODE := SQLCODE;
V_SQL_ERRMSG := SQLERRM;
DBMS_OUTPUT.PUT_LINE('TB_00002310_TRIGGER_INS_01 EXEC ERROR');
DBMS_OUTPUT.PUT_LINE('SQL ERROR CODE:' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('SQL ERROR MESSAGE:' || SQLERRM);
ROLLBACK;
END TB_00002310_TRIGGER_INS_01;
오류내용
==========================[Start Time : 2017/06/19 09:27:58]==========================
SQL > CREATE OR REPLACE TRIGGER TB_00002310_TRIGGER_INS_01
AFTER INSERT ON TB_INFO_PACM_00001000
DECLARE
V_SQL_CODE VARCHAR2(255) :='';
경고와 함께 실행이 완료되었습니다.
3/32 PLS-00103: 심볼 "end-of-file"를 만났습니다 다음 중 하나가 기대될 때:
begin function pragma procedure subtype type <식별자>
<큰 따옴표로 구분된 식별자> current cursor delete
exists prior
Time used: 20 Millis
==========================[Start Time : 2017/06/19 09:28:00]==========================
SQL > V_SQL_ERRMSG VARCHA2(255) :=''
ORA-00900: SQL 문이 부적합합니다
Error code: 900
SQL state: 42000
1. INSERT 트리거에서는 :OLD 사용 못합니다.
- INSERT 는 :NEW 만 가능.
- DELETE 는 :OLD 만 가능
- UPDATE 는 둘 다 사용 가능
2. :OLD, :NEW 의 사용은 문장트리거에서는 사용 못합니다.
- 행트리거에는 FOR EACH ROW 구문이 필요합니다.
- 위치는 DECLARE 앞
3. 트리거에서는 커밋/롤백 사용 못합니다.
- 트리거는 트리거를 발생시킨 문장의 커밋/롤백에 종속됩니다.
4. 위 1,2,3 은 논리적인 오류들이고
- 언급하신 오류는 단순 구문오류입니다.
- 오타 등이 없는지 확인하세요.