본문 바로가기

개인공부 정리/다양한 질문들

0210 수업 질문 - 커서와 예외처리, 트리거

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" 열, 현재 사용자 및 현재 시스템 날짜.

 

 

 

728x90
반응형
LIST