이클립스에서 SQL 파일에서
CREATE OR REPLACE TRIGGER TRRIGER_NAME
BEFORE UPDATE
ON USERS
FOR EACH ROW
BEGIN
INSERT INTO USERS_LOG (LID, MID, NICKNAME) VALUES ((SELECT NVL(MAX(LID), 0) + 1 FROM USERS_LOG), :OLD.MID, :OLD.NICKNAME);
END;
해당 구문을 실행 시켰을때 에러가 발생하였다
Group Exection 오류가 발생하였다
드롭메뉴를 확인해보니
ORA-00900: invalid SQL statement 이 해당에러는 오타 아니면 SQL문 맨뒤에 세미콜론이 붙어있을때 발생한다
그래서
CREATE OR REPLACE TRIGGER TRRIGER_NAME
BEFORE UPDATE
ON USERS
FOR EACH ROW
BEGIN
INSERT INTO USERS_LOG (LID, MID, NICKNAME) VALUES ((SELECT NVL(MAX(LID), 0) + 1 FROM USERS_LOG), :OLD.MID, :OLD.NICKNAME)
END;
INSERT 문에 세미콜론을 지워 보았더니
바로 트리거가 생성되었다
그래서 트리거가 잘 작동되는지 확인하기위해
UPDATE USERS SET NICKNAME='라이츄' where MID=1;
업데이트를 해보았는데
해당 에러가 발생하였다
이 에러는 ORA-04098: trigger 'TEEMO.TRRIGER_NAME' is invalid and failed re-validation
(0 rows affected)
트리거가 부적합하며 재검증을 실패했습니다.
트리거가 잘못되었다는 건데
세미콜론을 지워서 트리거가 생성되었으니 세미콜론은 배재하고 다른 구문이 잘못되었나 찾아보았다
그래서 찾은 방법이 트리거 권한이 없어서 안될 수도 있다라는 내용을 확인해서
GRANT CREATE TRIGGER TO teemo;
GRANT CREATE ANY TRIGGER TO TEEMO;
GRANT ALTER ANY TRIGGER TO TEEMO;
권한도 줘보고
select * from USER_SYS_PRIVS;
구문을 사용해서
확인도 하고
select * from all_errors;
에러도 확인을 해보았는데 구문이 오류가 있다는걸 알 수 있었다
그래서 현재 트리거 코드를 버리고 GPT에게
해당 코드를 받아서 이클립스 SQL 파일에서 실행 시켰는데
또 같은 오류가 발생하였다
그래서 뒤에 세미콜론을 지웠더니 트리커가 잘 등록이 되어서 업데이트를 사용했는데 여전히 실패했다
다시 GPT에게 물어보니
세미콜론이 있어야한다는 답변을 받아볼 수 있었다
그럼 이클립스가 잘못된건가라는 생각이 갑자기 들어서
바로 DBeaver를 사용해서
CREATE OR REPLACE TRIGGER TRRIGER_NAME
BEFORE UPDATE
ON USERS
FOR EACH ROW
BEGIN
INSERT INTO USERS_LOG (LID, MID, NICKNAME) VALUES ((SELECT NVL(MAX(LID), 0) + 1 FROM USERS_LOG), :OLD.MID, :OLD.NICKNAME);
END;
해당 구문을 실행시키니
바로 트리거가 생성된걸 확인 할 수 있었다
바로 업데이트를 해보니
잘 등록되는 것을 확인하였다
혹시나 해서
세미콜론 없이 트리거를 등록해보니 또 등록은 잘 되었다
하지만
업데이트를 하였을때
해당 오류가 똑같이 발생한것을 확인 할 수 있었다
결론 : 트리거 생성시 세미콜론으로 구문을 끝내줘야 잘 작동하고
이클립스에선 트리거가 인식이 안되는것을 알 수 있었다
'Exception' 카테고리의 다른 글
SQL Error [4082] [42000]: ORA-04082: NEW or OLD references not allowed in table level triggers (0) | 2024.02.04 |
---|---|
트리거연습2 오류 (0) | 2024.01.30 |
uncaught syntaxerror: unexpected token ';' (0) | 2024.01.22 |
SQL - ORA-01427: single-row subquery returns more than one row (0) | 2024.01.17 |
Listener refused the connection with the following error - 연결을 거부 (1) | 2023.12.21 |