DBMS/Oracle

저장 프로시저 , 패키지, 트리거, 함수

구일일구 2022. 11. 25. 16:42
반응형

저장 프로시저 , 패키지, 트리거, 함수

프로시저나 함수는 myBatis에서 동적쿼리로 대신 가능. 

트리거는 이벤트를 줘서 특정 테이블에 인서트가 된다면,업데이트가 된다면과 같은 조건을 가지고 작업함 => 트리거에 대해 공부해야함

프로시저를 한데 묶어주는 것이 패키지

특정 테이블의 데이터에 변경이 되었을 때, 자동으로 수행되는 트리거

 

저장 프로시저

자주 사용되는 쿼리문을 모듈화시켜서 필요할 때마다 호출하여 사용하는 것

SET SERVEROUTPUT ON --결과를 보기 위한 설정

create or replace procedure EMPOUTProc --이미 프로시저가 있다면, 수정(REPLACE)함
IS
vemp emp%rowtype; --변수 선언
cursor c1  --쿼리문의 실행결과를 c1에 저장
is
select * from emp where deptno=20;

begin
    DBMS_OUTPUT.PUT_LINE('사원번호 / 사원명 / 급여');
    DBMS_OUTPUT.PUT_LINE('-------------------');
    for vemp in c1 loop 
        exit when c1%notfound;
        DBMS_OUTPUT.PUT_LINE(vemp.empno||' ::::: '||vemp.ename||' ::::: '||vemp.sal);
    end loop;
END;
/

execute EMPOUTProc --만든 프로시저를 출력

select * from user_source; --프로시저가 생성되었는지 확인

show errors; --오류메시지 출력됨.

 

소제목 입력

매개변수는 프로시저 이름 뒤에 ( ) 를 적고, 그 안에 매개변수를 적음.

변수명과 자료형으로 적기

create or replace procedure EMPOUTProc2
(vdeptno in emp.deptno%type) --매개변수
IS
vemp emp%rowtype;
cursor c1
is
select * from emp where deptno=vdeptno;
begin
    DBMS_OUTPUT.PUT_LINE('사원번호 / 사원명 / 급여');
    DBMS_OUTPUT.PUT_LINE('-------------------');
    for vemp in c1 loop
        exit when c1%notfound;
        DBMS_OUTPUT.PUT_LINE(vemp.empno||' ::::: '||vemp.ename||' ::::: '||vemp.sal);
    end loop;
END;
/

execute EMPOUTProc2(30)

drop table emp01 purge --완전 삭제


create table emp01
as
select * from emp

insert into emp01
select * from emp

select * from emp01 order by deptno

commit

 

* in mode 매개변수 : 실행환경에서 서브 프로시저로 값을 전달함

create or replace procedure pro01_inmode
(v_deptno in emp01.deptno%type)
is 
begin
    update emp01 --수정
    set sal = decode(v_deptno, 10, sal*1.1, 20, sal*1.2, sal)
    --부서번호가 10이면 10%인상, 20이면 20% 인상 나머지는 동결
    where deptno = v_deptno;
end pro01_inmode;
/

 

패키지

 

 

트리거

어떤 이벤트가 발생하면 그에 따라 다른 작업이 자동으로 처리됨 => 프로시저는 직접 실행 / 트리거는 자동 실행

1) 타이밍 

- BEFORE : 어떤 테이블에 INSERT, UPDATE, DELETE문이 실행되기 전에. 트리거 문장 실행

- AFTER : 어떤 테이블에 INSERT, UPDATE, DELETE문이 실행되고 난 후. 트리거 문장 실행

 

 

함수

 

반응형