[ Oracle - Trigger 특징_Trigger유형 ]

 

트리거 유형

1. Row-level(행 레벨) 트리거 : 하나의 트랙잭션에서 각 행에 대해 실행..

     for each row 절을 사용하면 된다.

2. Statement-level(문장 레벨)트리거 : 각 트랜잭션을 위해 한 번 시행 한다.

    디폴트 유형의 트리거 이다.

3. Before  트리거와 After 트리거 :

     새로운 값을 액세스하기 위해 BEFORE INSERT 트리거를 사용

4. INSTEAD OF 트리거

   뷰가 두 개의 테이블의 조인을 포함하는 경우 레크드에 UPDATE 명령을 사용할 수 있는 능력을 제한된다.

 그러나 INSTEAD OF 트리거를 사용하는 경우 사용자가 뷰를 통해 값을 변경하고자 할 때 뷰의 기저 테이블에

 레코드를 업데이트하거나 삭제 하거나 또는 삽입하는 방법을 ORACLE 에게 알려 줄 수 있다.

유효한 트리거 유형

   1. BEFORE INSERT 행

   2. BEFORE INSERT 문

   3. AFTER INSERT 행

   4. AFTER INSERT 문

   5. BEFORE UPDATE 행

   6. BEFORE UPDATE 문

   7. AFTER UPDATE 행

   8 . AFTER UPDATE 문

   9. BEFORE DELETE 행

   10. BEFORE DELETE 문

   11. AFTER DELETE 행

   12. AFTER DELETE 문

   13. INSTEAD OF 행

   14. INSTEAD OF 문

 

 

 

Posted by 농부지기
,

[ Oracle - Function 공통.두 날자의 년수를 구함 ]

 

Posted by 농부지기
,

[ Oracle - Function 공통.두 날자의 개월수를 구함 ]

 

Posted by 농부지기
,

[ Oracle - Function 공통.당월 말 구하기 ]

 

 

Posted by 농부지기
,

[ Oracle - Function 공통.두 날자 차이 구하기 ]

 

 

Posted by 농부지기
,

[ Oracle - Function 월 더하기.빼기 ]

 

Posted by 농부지기
,

[ Oracle - Function 예제2 ]

 

 

Posted by 농부지기
,

[ Oracle - Function 예제1 ]

 

Posted by 농부지기
,

[ Oracle - Procedure DBMS_JOB]

 

☞ DBMS_JOB PACKAGE의 사용 방법과 예제

 
Purpose
-------
DBMS_JOB package의 사용방법에 대해 알아보자.

Explanation
-----------
Unix의 cron과 같이 오라클에서도 일정한 시점, 또는 간격으로 반복해서 
job을 수행시킬 수 있다.  DBMS_JOB package를 이용하여 수행시킬 수 있는
데, 이것을 위해서는 SNP background process가 start되어 있어야 한다.
 다음의 parameter를 init<SID>.ora file에 설정한 후 oracle을 startup하면 
SNP0 혹은 J000 process가 뜨게된다.
    job_queue_processes = 1
      -> 이 파라미터는 snp process를 몇 개 띄울지를 결정한다.  
         default=0
    job_queue_interval = 60
      -> 이 파라미터는 snp process가 깨어나는 간격을 초로 설정한다.
 (Oracle9i부터는 job_queue_interval parameter가 없어졌으므로 
  job_queue_processes 만 설정하면 된다.)

DBMS_JOB Package는 다음과 같은 procedure를 이용하여 사용한다.
DBMS_JOB.submit(job           out   binary_integer,
                what          in    varchar2,
    next_date     in    date defalut sysdate,
   interval      in    varchar2 default 'null',
  no_parse      in    boolean default false)
-> dbms_job.submit procedure는 job의 내용을 정의하고 oracle이 job을 
 수행할 수 있도록 한다.

Example
-------
[ 예제 ] file jobcre.sql
begin
 dbms_job.submit(:jobno,              
--  job 의 번호
 'insert into scott.testdate values(1,  sysdate);',    
--  job의 내용 : ' '으로 감싸준다. 
--  procedure를 실행하는 경우 ' username.procedure_name;' 만 쓰면 된다.
    sysdate,
--  job이 실행될 시간
 'sysdate + 5/24/60' ,
--  job이 실행되는 간격 , 위의 경우는 5분마다 실행하도록 했다. 
--  ' '으로 감싸준다.
   FALSE );
end;
/
$ sqlplus scott/tiger
SQL>  variable jobno number;
SQL>  @jobcre
SQL>  print jobno    --  job 번호 확인 : 여기서는 166번
SQL>  exec dbms_job.run(166);
SQL>  commit;
    지금부터 interval에 따라 job이 실행된다. 
    job 실행 여부를 알아보기 위해서 다음의 sql 문장을 수행한다.
SQL> col what format a20
SQL> select what, job, next_date, next_sec, failures, broken 
     from user_jobs;
      그 외에 
 
SQL> exec  dbms_job.run(jobno); 
      - job의 강제 실행, job이 16번 fail되어 broken된 경우는 
        위의 명령어로 강제로 run을 시켜서 실행되면 다시 interval마다
        실행된다.
SQL> exec  dbms_job.broken(jobno, TRUE); 
      - job을 disable시킴
SQL> exec  dbms_job.remove(jobno);
      - job의 삭제 

참고1. snapshot과 job과의 관계
snapshot 도 job 으로 등록되어 실행된다. 
즉, select job, what from dba_jobs; 를 조회하면,
what 부분에 snapshot 이 정의되어 있다.
따라서, snapshot 에 대한 disable 방법 등은 job 과 같은 방법으로 
실행하면 된다.

참고2. interval 시간 지정 예제
1. 10분에 한번씩 실행하는 경우
 
   sysdate + 1/24/6       또는  sysdate + 1/144   
     -> 1/24 (1시간-60분) / 6  : 10분 단위
        1/144   :  24*6  으로 나누어도 같은 의미가 된다.
 
2. 1분에 한번으로 지정하는 경우
   sysdate + 1/24/60   또는   sysdate + 1/1440
3. 매일 새벽 2시로 지정하는 경우
   trunc(sysdate) + 1 + 2/24  ->  다음날 새벽 2시를 지정함.

4. 매일 밤 11시로  지정하는 경우
   trunc(sysdate) + 23/24     ->  오늘 밤 11시를 지정했음.

Reference Documents
-------------------
Oracle Developer's Guide and Oracle PL/SQL Guide
 
otn.oracle.co.kr

 

Posted by 농부지기
,

[ Oracle - Procedure 예제_BULK COLLECT INTO ]

 

Posted by 농부지기
,