사용자 table 데이터 중에서 꼭 변경되면 안되는 데이터는 반드시 있기마련입니다.
예를 들자면, 이름과 주민등록 번호, 학생과 학번, 등등..
위의 데이터 처럼 입력은 가능해야 하나 한번 입력된 특정 column을 변경되지 않게 하기 위해서는 어떤 방법이 있을까요?
가장 쉽게 생각할 수 있는게 trigger 입니다.
다음은 trigger를 이용해 특정 column을 변경하지 못하게 설정하는 trigger sample 입니다.
(사실 trigger 이외에 딱히 생각나는 방법이 없네요 --;)
1. SCOTT user의 EMP table에 trigger를 설정합니다.
CREATE TRIGGER emp_upd_trigger
BEFORE UPDATE on emp
declare
v_error VARCHAR2(256);
begin
if (updating('EMPNO') or updating('ENAME'))
then
v_error:='You cannot update the empno';
raise_application_error (-20999,v_error);
end if;
end;
/
2. trigger가 만들어 졌으면 간단히 테스트를 해볼까요?
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ------------------------------ --------------------------- ---------- ---------- ---------- ---------- ----------
7900 JAMES CLERK 7698 1981-12-03 950 30
7902 FORD ANALYST 7566 1981-12-03 3000 20
7934 MILLER CLERK 7782 1982-01-23 1300 10
SQL> update emp set empno = 9999 where ename = 'MILLER';
update emp set empno = 9999 where ename = 'MILLER'
*
ERROR at line 1:
ORA-20999: You cannot update the empno or ename
ORA-06512: at "SCOTT.EMP_UPD_TRIGGER", line 7
ORA-04088: error during execution of trigger 'SCOTT.EMP_UPD_TRIGGER'
SQL> update emp set ename = 'ORACLE' where empno = 7934;
update emp set ename = 'ORACLE' where empno = 7934
*
ERROR at line 1:
ORA-20999: You cannot update the empno or ename
ORA-06512: at "SCOTT.EMP_UPD_TRIGGER", line 7
ORA-04088: error during execution of trigger 'SCOTT.EMP_UPD_TRIGGER'
이 방법 이외에 다른 방법 아시는 분..
좀 알려주세요.. ^^
* 여기저기서 좋다는 책 몇권 추천합니다. 고수가 되는 그날까지.. 파이팅!!
'Oracle Database' 카테고리의 다른 글
SGA - library cache lock/pin II (1) | 2010.09.20 |
---|---|
Oracle 11g SQLPLUS의 errorlogging 기능 (0) | 2010.09.17 |
Oracle 10g에서 11g로 upgrade 할때, 기존의 hint를 삭제해야 할까요? (0) | 2010.08.09 |
ORACLE GROUP BY와 함께 쓰이는 HAVING 절 (1) | 2010.08.06 |
ORACLE Nested Group Operations (0) | 2010.08.06 |