티스토리 뷰
15_PLSQL프로시저_트리거.pdf
0.45MB
04PLSQL트리거.sql
0.00MB
/*
trigger는 테이블에부착한 형태로써, insert, update, delete 작업이 수행될 때
특정 코드가 작동되도록 하는 구문입니다.
트리거는 실행할 때 범위를 지정하고 f5버튼으로 부분 실행해야 합니다.
그렇지 않으면 하나의 구문으로 인식되어 정상동작하지 않습니다.
*/
create table tbl_test(
id number(10),
text varchar2(20)
);
--
set SERVEROUTPUT on;
/*
CREATE or REPLACE TRIGGER trg_test
AFTER update or delete --삭제, 수정 이후에 동작
on tbl_test --부착할 테이블
for each row --각 행에 적용
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE('트리거가 동작함');
end;
*/
insert into tbl_test values(1, '홍길동');
insert into tbl_test values(2, '이순신');
update tbl_test set text = '홍길동' where id = 1;
delete from tbl_test where id = 2;
-------------------------------------------------------------------------------------
--before vs after
/*
after트리거 - insert, update, delete 작업 이후에 동작하는 트리거를 의미합니다. (이게 더 많이 사용)
before트리거 - insert, update, delete 작업 이전에 동작하는 트리거를 의미합니다.
:OLD = 참조 전 열의 값 (INSERT : 입력 전 자료, UPDATE : 수정 전 자료, DELETE : 삭제할 자료)
:NEW = 참조 후 열의 값 (INSERT : 입력 할 자료, UPDATE : 수정 된 자료)
*/
create table tbl_user_backup(
id varchar2(20),
name varchar2(20),
address varchar2(30),
updatedate date default sysdate,
m_type char(10), --변경타입
m_user varchar2(20) --변경한 사용자
);
create table tbl_user(
id varchar2(20) primary key,
name varchar2(20),
address varchar2(30)
);
--update나 delete를 시도하면 수정 또는 삭제된 데이터를 별도의 테이블에 보관
create or replace trigger trg_user_backup
after update or delete
on tbl_user
for each row
declare --변수선언
vn_type varchar2(10);
begin
if updating then --업데이트 or 딜리트
vn_type := '수정';
elsif deleting then
vn_type := '삭제';
end if;
--user_backup에 인서트
insert into tbl_user_backup values(:old.id, :old.name, :old.address, sysdate, vn_type, user()); --:old. 하면 기존에 있던 데이터를 말함. user()은 디비계정사용자 이름을 입력해줌.
end;
insert into tbl_user values('test01', 'admin', '서울');
insert into tbl_user values('test02', 'admin', '경기');
insert into tbl_user values('test03', 'admin', '부산');
update tbl_user set address = '부산' where id = 'test01'; --동작
delete from tbl_user where id = 'test02'; --동작
select * from tbl_user_backup;
select * from tbl_user;
--before : 들어가기 전에 어떤 작업을 해준다.
create or replace trigger trg_user_insert
before insert
on tbl_user
for each row
declare
begin
:new.name := substr(:new.name,1,1) || '**'; --이렇게 하면 문자열의 제일 앞만 나옴. <입력전 데이터 **붙임>
end;
insert into tbl_user values('test04', 'admin', '부산');
insert into tbl_user values('test05', 'admin', '경기');
select * from tbl_user;
#데이터 베이스 수업을 끝마치면서.
-CREATE, CRUD구문은 모르면 안됨. 잘 공부해두기.
'데이터베이스 수업 기록' 카테고리의 다른 글
22-11-25 PLSQL구문, 프로시저 (0) | 2022.11.25 |
---|---|
22-11-22 JDBC, 데이터베이스와 자바의 연동 (0) | 2022.11.22 |
22-11-21 데이터베이스 모델링 - 정규화 (0) | 2022.11.21 |
22-11-18 롤(ROLE), 데이터베이스 모델링 (0) | 2022.11.18 |
22-11-17 INDEX, 권한 DCL문 (0) | 2022.11.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- interface #자바
- 자바스크립트 ES6 문법
- 중앙정보처리학원
- 국비학원 수업
- 강남역 12번 춣구
- 박인욱 강사님
- 국비학원
- 배열과 탐색
- 자바#자바수강기록
- 국비지원 학원 수업 내용
- output 스트림
- 알람 시계 문제
- 자바
- input 스트림
- 조건문
- 자바수업
- 다중 반복문
- 박문석 선생님
- FOR문
- 자바 api
- 배열 삭제
- 강남 중앙정보처리학원
- 내포 클래스
- JS ES6 문법
- 배열의 정렬
- 가비지 콜렉팅
- 데이터베이스 수업
- 오코노라멘
- api 활용
- nasted class
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함