본문 바로가기

Database/PLSQL

(109)
094 - [Oracle PL/SQL] Triggers - system event trigger sys 사용자로 로그인-- 로그인을 sys 유저로 로그인.alter session set container=orclpdb;show con_name------------------------------Session altered.CON_NAME ------------------------------ORCLPDB   테이블 생성 및 트리거 생성drop table log_table;/create table log_table(user_id varchar2(100), log_date date, action varchar2(100) );create or replace trigger logon_tafter logon on databasebegin insert into log_table values (user,s..
093 - [Oracle PL/SQL] DDL triggers ( Schema or Database ) 이전까지는 테이블이나 뷰를 대상으로 트리거에 대해서 알아보았습니다.이번에는 스키마, 데이터베이스에 대한 트리거에 대해서 알아보겠습니다.     스키마 트리거 생성 - 특정 시간에만 create 명령어를 수행할 수 있음CREATE OR REPLACE TRIGGER before_create_triggerBEFORE CREATE ON SCHEMA -- CREATE/ALTER/DROPBEGIN if to_number(to_char(sysdate,'hh24')) not between 8 and 16 then raise_application_error(-20001, 'Create not Allowed now'); end if;END;   테스트 결과 - 현재 시간이 8-16시 사이가 아니여..
092 - [Oracle PL/SQL] Triggers vs Procedures
091 - [Oracle PL/SQL] Trigger - Mutating & ON DELETE CASCADE PK 설정으로 인한 mutating 이 발생하는 경우에 대해서 알아보겠습니다.  테스트를 위한 테이블 생성 - 부모 테이블drop table DPET_parent;/CREATE TABLE DPET_parent(DEPTNO NUMBER, DNAME VARCHAR2(20), CONSTRAINT DPET_parent_PK PRIMARY KEY (DEPTNO ) ); INSERT INTO DPET_parent (DEPTNO,DNAME)VALUES (1,'HR DEPT');INSERT INTO DPET_parent (DEPTNO,DNAME)VALUES (2,'PO DEPT');COMMIT;SELECT * FROM DPET_parent;------------------------------- DEPTNO ..
090 - [Oracle PL/SQL] Trigger - Mutating(compound & array) Mutating 오류가 발생하는 경우는 많이 있습니다.이번에는 모든 부서별 월급 상/하한선을 감시하는 트리거를 만들어 보겠습니다.저장할 값이 많아서 배열을 이용하여 저장하는 방식으로 구현하였습니다.  준비단계-- 준비 단계, 복사본 테이블을 만들어서 테스트 합니다drop table emp_copy/create table emp_copyas select * from employees;--복사된 테이블 확인select EMPLOYEE_ID, FIRST_NAME,HIRE_DATE, JOB_ID,SALARYfrom emp_copywhere job_id='IT_PROG'order by salary;---------------------------------------EMPLOYEE_ID FIRST_NAME ..
089 - [Oracle PL/SQL] Trigger - Mutating error 트리거를 사용하다 Mutating 오류가 발생하는 이유와 해결하는 방법에 대해서 알아보자.   오류가 발생하는 이유는 실행한 쿼리의 일부 필드가 트리거에서 실행하는 쿼리와 충돌이 발생할 경우이다.다시 말하면 테이블이 수정되고 있는 상황에서 트리거가 같은 테이블을 접근하려 할때 발생한다. 예를 들어보면 신규 고객정보를 입력시, 고객 번호를 새로 만들어야 하는데, 시퀀스.nextval 을 사용하는 경우가 아니고 max(고객번호) + 1 같이, 기존의 고객번호의 최대값을 이용할 경우,아래와 같이 트리거를 작성할 수 있다. -- 준비 작업drop table customers/create table customers( cust_id number, cust_name varchar2(20));-- customers..
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..