트리거를 사용하여 삭제 히스토리 테이블 만들고 싶은데 막혔습니다 0 4 5,252

by 썸툰 [Oracle 기초] 트리거 oracle [2023.01.10 17:10:23]


테이블1. 회원테이블


CREATE TABLE tbl_member(
id VARCHAR2(6),
name VARCHAR2(15) NOT NULL,
birth DATE NOT NULL,
address VARCHAR2(300) NOT NULL,
pw VARCHAR2(300) NOT NULL,
email VARCHAR2(300),
grade CHAR(1) DEFAULT 'A',
CONSTRAINT pk_member_id PRIMARY KEY(id)
)

테이블2. 삭제 히스토리 테이블

CREATE TABLE tbl_delete_member(
id VARCHAR2(6),
name VARCHAR2(15),
deletedate DATE
)

 

트리거

CREATE or REPLACE TRIGGER tr_delete 
AFTER DELETE 
ON tbl_member
FOR EACH ROW
BEGIN
INSERT INTO tbl_delete_member
VALUES (old.id, old.name, curdate());
END;
/

 

여기저기 정보 찾으면서 수정해봤는데

delete 시 insert 트리거가 잘 안되서 질문드리려 왔습니다

어디서 오류가 난걸까요 ??

고수님들 조언 구하고자 합니다

by 마농 [2023.01.10 17:21:20]

1. old 앞에 콜론 누락 ( old -> :old )
2. 다른 DBMS(MySQL) 함수 사용? ( curdate() -> sysdate )


by 썸툰 [2023.01.10 17:50:30]

감사합니다 마농님

 

CREATE or REPLACE TRIGGER tr_delete 
AFTER DELETE 
ON tbl_member
FOR EACH ROW
BEGIN
INSERT INTO tbl_delete_member
VALUES (:old.id, :old.name, SYSDATE);
END;
/

 

말씀하신대로 수정하니 트리거 생성에는 성공했습니다

그런데 

### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-04098: trigger 'DW5.TBL_DELETE_MEMBER' is invalid and failed re-validation

### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: DELETE FROM tbl_member   WHERE id = ? AND pw = ?
### Cause: java.sql.SQLSyntaxErrorException: ORA-04098: trigger 'DW5.TBL_DELETE_MEMBER' is invalid and failed re-validation

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-04098: trigger 'DW5.TBL_DELETE_MEMBER' is invalid and failed re-validation
]을(를) 발생시켰습니다.
java.sql.SQLSyntaxErrorException: ORA-04098: trigger 'DW5.TBL_DELETE_MEMBER' is invalid and failed re-validation

재컴파일도 해보고 트리거 삭제 후 재생성도 해보았는데 같은 오류가 발생합니다

delete 시 where 절로 id, pw 를 주어서 트리거 테이블에도 필요한가 해서 추가해봤는데 그것도 안되네요 

혹시 해결 방안을 알고 계실까요 ??

 


by 마농 [2023.01.10 18:01:10]

TBL_DELETE_MEMBER 테이블이 온전한지 확인해 보세요.
TBL_DELETE_MEMBER 테이블에 TBL_DELETE_MEMBER 라는 동일한 이름으로 트리거가 걸려있는게 아닐까요?


by 썸툰 [2023.01.11 09:10:53]

와 감사합니다

연습하면서 만졌던 이런저런 트리거들이 엄청 걸려있었네요

덕분에 해결했습니다 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입