티스토리 뷰
반응형
저장 프로시저 , 패키지, 트리거, 함수
프로시저나 함수는 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문이 실행되고 난 후. 트리거 문장 실행
함수
반응형
'DBMS > Oracle' 카테고리의 다른 글
D+31 [데이터베이스 프로그래밍 기초] (0) | 2022.09.05 |
---|---|
D+27 [14. 서브 쿼리] (0) | 2022.08.30 |
D+27 [13. 조인] (0) | 2022.08.30 |
D+27 [07. 그룹 함수] (0) | 2022.08.30 |
D+26 [06. SQL 함수 예제] (0) | 2022.08.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- IndexError
- 순환할당
- Calendar 클래스
- 문자열함수
- Random 클래스
- 기본 API 클래스
- 요소선택
- Objects 클래스
- Pattern 클래스
- python
- 파이썬
- not_in
- 자료형
- StringTokenizer 클래스
- FALSE
- 딕셔너리
- Math 클래스
- 함수
- 리스트
- Format 클래스
- Date 클래스
- java.time.package
- 스레드 스케줄링
- StringBuilder 클래스
- 역반복문
- StringBuffer 클래스
- 포장 클래스
- Arrays 클래스
- 프로그램
- 리스트연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함