본문 바로가기

Database/PLSQL

(87)
088 - [Oracle PL/SQL] Trigger - Follows Statement 동일한 조건으로 2개의 트리거가 있을경우, 어떤 트리거가 먼저 실행되는지 확인해보자.  준비 - 테스트 테이블, 트리거용 테이블, 시퀀스 생성drop table emp;/create table emp(id number,name varchar2(20));/drop table which_fired_first;/create table which_fired_first(seq number, trigger_name varchar2(20) );/drop sequence s1;/create sequence s1;   트리거 생성 - 우선순위 없이 생성create or replace trigger t1beforeinserton empbegininsert into which_fired_first values ( s1.ne..
087 - [Oracle PL/SQL] Trigger - Instead of triggers (on Views) 뷰에 삽입한 데이터를 다르게 처리하는 방법에 대해서 알아보겠습니다.   테스트 준비-- 테스트 준비(뷰 생성).DROP VIEW emp_all_v;/create or replace view emp_all_vas select * from employees;/select * from emp_all_v;   데이터 추가-- 테스트 데이터 입력.-- 뷰에 데이터를 삽입하면 원본 테이블에도 추가된다. 단, 단일테이블인 경우 등, 몇가지 조건하에서만 가능.INSERT INTO emp_all_v(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID)VALUES(10..
086 - [Oracle PL/SQL] Trigger - Default value 값을 입력하지 않아도 자동으로 값이 입력되는 샘플입니다.   테스트 준비drop table customers;/create table customers( cust_id number, name varchar2(100), status char(1));   트리거 컴파일create or replace trigger customers_defaulf_statusbeforeinserton customersFOR EACH ROWbegin :new.status:='A';end;   테스트 - 입력하지 않은 status 값이 자동으로 입력됨INSERT INTO customers(cust_id,name)VALUES(1,'OMAR');SELECT * FROM customers;------------------------..
085 - [Oracle PL/SQL] Trigger - Firing sequence 오라클에서 트리거가 실행되는 순서에 대해서 알아보자  오라클에서는 4 종류의 트리거가 순서대로 발생 - 5개의 row 가 업데이트되는 쿼리인 경우.   테스트 환경 준비drop table test_emp;/create table test_emp( emp_id number, first_name varchar2(30) );/drop table test_emp_sequence;create table test_emp_sequence( seq number, trigger_type varchar2(30) ); drop sequence s;create sequence s;   4종류의 트리거 생성--1 before statmentcreate or replace trigger before_insert_statbef..
084 - [Oracle PL/SQL] Trigger - Create Audit table(다중 조건) 특정 테이블이 변경되었을 경우, 어떤 변화들이 발생했는지 자동으로 저장하는 audit 관련 트리거를 만들어 보자.   준비사항-- 준비작업.drop table emp_copy;/create table emp_copyas select * from employees;/select * from emp_copy;/drop table EMP_SAL_AUDIT;/-- 테스트용 테이블 생성.CREATE TABLE EMP_SAL_AUDIT( EMP_ID NUMBER, OPERATION VARCHAR2(15), OLD_SAL NUMBER, NEW_SAL NUMBER, OP_DATE DATE, BY_USER VARCHAR2(10));   트리거 생성-- now we need to create trigger for..
083 - [Oracle PL/SQL] DML Triggers - row-level sample new, old 정의할것.   오류 발생 코드가 있어서 1회만 실행되는 샘플 코드DROP TABLE EMP_COPY;/CREATE TABLE EMP_COPYAS SELECT * FROM employees;/SELECT EMPLOYEE_ID, FIRST_NAME,LAST_NAME, SALARY FROM EMP_COPY;# 옵션은 row level trigger 이지만, 오류를 발생시키므로 1회만 동작된다.create or replace trigger check_salbeforeinsert or update of salaryonEMP_COPYfor each row -- row trigger 옵션begin if :new.salary   (오류 발생 코드가 없어서) 여러번 트리거가 발생하는 샘플 코드creat..
082 - [Oracle PL/SQL] DML Triggers - stament-level sample 간단한 샘플 코드 delete from departments; ----------------------------- Error report - ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found -- let us do statment level trigger create or replace trigger dept_check_time before insert or update or delete -- time, event on DEPARTMENTS -- table begin if to_number (to_char(sysdate,'hh24') ) not between 8 and 16 then raise_applicatio..
081 - [Oracle PL/SQL] DML Triggers(stament-level/row-level) statement trigger 샘플 코드 drop table t1; / create table t1 ( emp_id number, ename varchar2(20) ); / insert into t1 values (1,'ford'); insert into t1 values (2,'aya'); ---statement trigger create or replace trigger t1_b4_update before update --this timeing + event on t1 -- table name begin DBMS_OUTPUT.PUT_LINE(':)'); end; update t1 set ename=ename||' s'; -- 업데이트가 발생하면 트리거는 업데이트 개수와 상관없이 1번 실행된다 ---..