Q1. 479P 예외 처리하는 부분에서 SQLCODE를 출력하는 과정에 대해 질문이 있어. TO_CHAR를 쓰는 것과 안 쓰는 것의 결과값 차이가 없는데 쓰는 이유가 뭐야?
DBMS_OUTPUT.PUT_LINE ('SQLCODE : ' || TO_CHAR(SQLCODE));
이 TO_CHAR함수는 쿼리에서 숫자 값을 SQLCODE문자열 데이터 유형으로 변환하는 데 사용됩니다. TO_CHAR함수를 사용하지 않아도 같은 결과가 나올 수 있지만 TO_CHAR함수는 숫자 값을 문자열로 명시적으로 변환하여 출력을 더 읽기 쉽게 만듭니다. 또한 TO_CHAR함수를 사용하면 출력 값이 함수에 필요한 데이터 유형인 문자 DBMS_OUTPUT.PUT_LINE됩니다.
Q2. 해당 쿼리에 대해 설명해줘. (DML 실행 후 수행할 트리거)
CREATE OR REPLACE TRIGGER trg_emp_log
AFTER
INSERT OR UPDATE OR DELETE ON EMP_TRG
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO emp_trg_log
VALUES ('EMP_TRG', 'INSERT', :new.empno,
SYS_CONTEXT('USERENV', 'SESSION_USER'), sysdate);
ELSIF UPDATING THEN
INSERT INTO emp_trg_log
VALUES ('EMP_TRG', 'UPDATE', :old.empno,
SYS_CONTEXT('USERENV', 'SESSION_USER'), sysdate);
ELSIF DELETING THEN
INSERT INTO emp_trg_log
VALUES ('EMP_TRG', 'DELETE', :old.empno,
SYS_CONTEXT('USERENV', 'SESSION_USER'), sysdate);
END IF;
END;
/
쿼리는 데이터베이스에 "trg_emp_log"라는 트리거를 생성합니다. 트리거는 특정 테이블에서 삽입, 업데이트 또는 삭제 작업과 같은 특정 이벤트에 대한 응답으로 자동으로 실행되거나 시작되는 특수한 유형의 저장 프로시저입니다.
트리거는 "EMP_TRG" 테이블에서 생성되며 해당 테이블에서 삽입, 업데이트 또는 삭제 작업이 수행된 "후"에 트리거됩니다. 트리거는 "FOR EACH ROW" 절로 정의됩니다. 즉, 트리거링 이벤트의 영향을 받는 각 행에 대해 한 번씩 실행됩니다.
트리거에는 "INSERTING" 부울 변수의 값을 확인하는 IF 문이 포함되어 있습니다. 변수가 true로 설정되면 트리거가 삽입 작업의 결과로 시작되고 트리거가 "EMP_TRG", "INSERT" 값이 있는 "emp_trg_log" 테이블에 새 행을 삽입한다는 의미입니다. ":new" 레코드의 "empno" 열, 현재 사용자의 이름을 반환하는 "SYS_CONTEXT('USERENV', 'SESSION_USER')" 함수의 값 및 현재 시스템 날짜.
동일한 유형의 논리가 "UPDATING" 및 "DELETING" 조건에 적용됩니다. 여기서 트리거는 "EMP_TRG", "UPDATE" 또는 "DELETE" 값이 있는 "emp_trg_log" 테이블에 새 행을 삽입합니다. ":old" 레코드의 empno" 열, 현재 사용자 및 현재 시스템 날짜.
'개인공부 정리 > 다양한 질문들' 카테고리의 다른 글
0213 만만한 통계 R 수업 질문 - X바, 모평균, 편차, 변동성, 표준편차 (0) | 2023.02.13 |
---|---|
0210 오라클 DB 입문 최종 정리 - 질문 정리 (0) | 2023.02.10 |
0209 수업 질문 - PL/SQL, 커서와 예외처리 (0) | 2023.02.09 |
0208 수업 질문 - 제약 조건 및 사용자, 권한, 롤 관리 (0) | 2023.02.08 |
0207 수업 질문 - 데이터 정의어, 객체 종류, 제약 조건 (0) | 2023.02.07 |