원지의 개발
article thumbnail
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
profile

원지의 개발

@원지다

250x250