활용하기 - USER_SOURCE

 

만약 USER_SOURCE 테이블을 활용하지 않는다면, 모든 저장 오브젝트(프로시저, 함수, 트리거 등)를 하나씩 열어서 내용을 확인해야한다. 여기서는 HR을 예로 들어서 하나씩 찾아 확인해도 문제없지만 저장 오브젝트가 많다면 시간이 많이 걸릴것이다. 

 

 

1) 사용자 확인

워크시트>

SHOW USER

 

스크립트 출력>

USER이(가) "HR"입니다.

 

 

2) USER_SOURCE 컬럼 이름과 데이터 타입 확인

워크시트>

DESC USER_SOURCE

 

스크립트 출력>

이름   널? 유형             
----     --    -------------- 
NAME      VARCHAR2(30)   
TYPE        VARCHAR2(12)   
LINE         NUMBER         
TEXT        VARCHAR2(4000) 

 

 

3) HR의 저장 오브젝트 중에 UPDATE 사용하는 것 찾기

워크시트>

SELECT *
  FROM USER_SOURCE
 WHERE TEXT LIKE '%DELETE%';

 

스크립트 출력>

NAME                             TYPE         LINE    TEXT
SECURE_EMPLOYEES    TRIGGER    2 "       BEFORE INSERT OR UPDATE OR DELETE ON employees"

 

결과 내용을 보면

트리거 SECURE_EMPLOYEES에서 UPDATE를 사용하고 있다.

 

 

4) 트리거 SECURE_EMPLOYEES 열기

create or replace TRIGGER secure_employees
  BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
  secure_dml;
END secure_employees;

 

 

5) 트리거에서 사용하는 secure_dml 찾기

워크시트>

-- NAME과 TYPE 에서 중복을 제거함
SELECT DISTINCT NAME, TYPE
  FROM USER_SOURCE
 WHERE NAME = UPPER('secure_dml');

 

스크립트 출력>

NAME               TYPE
SECURE_DML    PROCEDURE

 

 

6) 프로시저 SECURE_DML 열기

create or replace PROCEDURE secure_dml
IS
BEGIN
  IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00'
        OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN
RAISE_APPLICATION_ERROR (-20205,
'You may only make changes during normal office hours');
  END IF;
END secure_dml;

 

해석을 잠시해보면

현재 날짜의 시간이 08:00에서 18:00 사이가 아니고, 또는 토요일, 일요일이라면

'You may only make changes during normal office hours'

이런 에러 메시지를 보여줘라.

 

728x90

+ Recent posts