728x90
Procedure (프로시저)
- 일련의 작업들을 하나로 묶어서 저장해 두었다가 호출하여 실행하게 하는 것
- 생성한 저장 프로시저는 여러 번 반복해서 호출, 사용 가능
저장 - 실행 - 제거
create (or replace) procedure 프로시저 이름
is
변수의 선언
begin
PLSQL 구문 --insert, select, update, delete 등
end;
- or replace: 이미 같은 이름으로 저장 프로시저를 생성할 경우 기존 프로시저는 삭제하고 재생성
옵션으로 생략해도 되지만 붙여주는게 관례
--프로시저 실행
execute 프로시저 이름;
-- 프로시저 제거
drop procedure 프로시저 이름;
프로시저 변수 + 내용 추가
- 프로시저 생성시 매개변수를 선언할 수 있는데 in, out, inout 기술 가능
in | 데이터를 전달 받을 때 |
out | 수행된 결과를 받아갈 때 |
inout | 둘 다 |
create or replace procedure test_proc
(P_VAR1 in varchar2, --입력 (반환불가)
P_VAR2 out varchar2, -- 출력 (프로시저가 끝나기 전에는 값의 할당이 안 됨), 실행된 결과를 밖으로 가져나가기 위해 사용
P_VAR3 in out varchar2 --입력, 반환(출력)
)
is --변수의 영역
begin
-- P_VAR1 := '결과1'; (in변수 할당불가)
P_VAR2 := '결과2';
P_VAR3 := '결과3';
end;
트리거 (Trigger)
- 테이블에 부착하는 형태로써 insert, update, delete 작업이 수행될 때 특정 코드가 작동되도록 하는 구문
생성
create trigger 트리거 이름
timing(before|after) event(insert|update|delete)
on 부착 테이블 이름
(for each row) --각 행에 적용(거의 맨날 적용)
(where conditions)
begin
statement
end;
타이밍 - 이벤트 - 변수값
★ after - insert, update, delete 작업 이후에 동작하는 트리거
before - insert, update, delete 작업 이전에 동작하는 트리거
이벤트 - 사용자가 어떤 DML문을 실행했을 때 트리거를 발생시킬 것인지 결정
변수값은 입력을 기준으로 생각해야 함
:OLD = 참조 전 열의 값 (insert: 입력 전 자료, update: 수정 전, 입력 전 자료, delete: 삭제 할 자료)
:NEW = 참조 후 열의 값 (insert: 입력 할 자료, update: 수정 된 자료, 들어가고 나서, 입력 후 자료)
create or replace trigger 트리거 이름
after update or delete --업데이트나 삭제 후에 동작
on 부착할 테이블 이름
for each row --각 행에 적용
declare
vn_type varchar2(10); --column 선언(?)
begin
if updating then --updating (시스템에서 지원하는 구문 중 하나)
vn_type := '수정'
elseif deleting then --deleting 되었다면
vn_type := '삭제';
end if;
insert into 트리거 이름
values (:OLD.ID, :OLD.NAME; :OLD.ADDRESS, SYSDATE, VN_TYPE, USER());
--:OLD 는 기존(테이블)에 남아있는 데이터
end;
- updating, deleting은 각 작업에서 사용하는 키워드
728x90
'프로그래밍 언어 > SQL-Oracle' 카테고리의 다른 글
[SQL] 권한, 사용자생성, 역할, 비밀번호 변경 (0) | 2022.11.17 |
---|---|
[SQL] 시퀀스(Sequence), 인덱스(index) (0) | 2022.11.17 |
[SQL] 제약조건, view (0) | 2022.11.16 |
[SQL] DDL 데이터 정의어, 테이블 CRUD (0) | 2022.11.15 |
[SQL] DML 데이터조작어(insert, update, delete, merge, ctas), TCL(트랜잭션) (0) | 2022.11.15 |