상세 컨텐츠

본문 제목

오라클 프로시저 예제 (Oracle Procedure, 프로시져)

DB/Oracle

by husks 2014. 12. 23. 19:06

본문

반응형


오라클 프로시져 예제 입니다.

원본 테이블을 읽어와서 커서를 생성하고 LOOP를 돌아 백업 테이블에 입력하는 기본 프로시져입니다.

커서관련 정보는 여기서 확인하세요. http://annehouse.tistory.com/102

프로시져 삭제는 DROP PROCEDURE 프로시져명; 입니다.


SET SERVEROUTPUT ON;  (DBMS_OUTPUT.put_line(); 으로 로그 출력시 프로시저 실행전 앞에 명령어를 실행해야 출력 된다.)



[프로시저를 실행하기 위해 기초데이터 생성]


1
2
3
4
5
6
7
8
9
10
--원본 테이블
CREATE TABLE BOOKS (
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(20NOT NULL,
  WRITER VARCHAR(20NOT NULL,
  PRICE NUMBER(10,2DEFAULT 0,
  GENRE VARCHAR(20NOT NULL,
  PUBLISHER VARCHAR(20NOT NULL,
  CNT NUMBER(10,0DEFAULT 0
);



1
2
3
4
5
6
7
8
9
10
--백업 테이블
CREATE TABLE BOOKS_BAK (
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(20NOT NULL,
  WRITER VARCHAR(20NOT NULL,
  PRICE NUMBER(10,2DEFAULT 0,
  GENRE VARCHAR(20NOT NULL,
  PUBLISHER VARCHAR(20NOT NULL,
  CNT NUMBER(10,0DEFAULT 0
);



1
2
--시퀀스 생성
CREATE SEQUENCE BOOKS_SEQID INCREMENT BY 1 START WITH 1;



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
32
33
--데이터 입력
INSERT INTO BOOKS(
  ID,
  NAME,
  WRITER,
  PRICE,
  GENRE,
  PUBLISHER
VALUES (
  BOOKS_SEQID.NEXTVAL,
  '홍길동전',
  '허균',
  300,
  '소설',
  '허균 출판사'
);
 INSERT INTO BOOKS(
  ID,
  NAME,
  WRITER,
  PRICE,
  GENRE,
  PUBLISHER
VALUES (
  BOOKS_SEQID.NEXTVAL,
  '레미제라블',
  '빅토르 위고',
  900,
  '소설',
  '빅토르 출판사'
);
COMMIT;
 




[프로시저 생성]


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--프로시져 생성 시작
CREATE OR REPLACE PROCEDURE PRO_BACKUP_BOOK(
  BOOK_ID IN BOOKS.ID%TYPE --BOOKS 테이블의 ID와 같은 컬럼 타입 (외부에서 받는 값)
)
IS
  --커서 선언
  CURSOR CSOR IS SELECT ID, NAME, WRITER, PRICE, GENRE, PUBLISHER, CNT FROM BOOKS WHERE ID = BOOK_ID;
  --사용할 변수 선언
  B_ID BOOKS.ID%TYPE; --테이블.컬럼%TYPE (해당 테이블의 컬럼 타입과 동일하게 선언하겠다는 표현)
  B_NAME BOOKS.NAME%TYPE;
  B_WRITER BOOKS.WRITER%TYPE;
  B_PRICE BOOKS.PRICE%TYPE;
  B_GENRE BOOKS.GENRE%TYPE;
  B_PUBLISHER BOOKS.PUBLISHER%TYPE;
  B_CNT BOOKS.CNT%TYPE;  
 
BEGIN
  
  OPEN CSOR; --커서 열기
    LOOP --루프 시작
      FETCH CSOR INTO B_ID, B_NAME, B_WRITER, B_PRICE, B_GENRE, B_PUBLISHER, B_CNT; --커서에서 가져와 위에 선언한 변수에 삽입 (갯수 일치)
      EXIT WHEN CSOR%NOTFOUND; --LOOP를 빠져나오는 조건
        INSERT INTO BOOKS_BAK( --백업 테이블에 입력
          ID,
          NAME,
          WRITER,
          PRICE,
          GENRE,
          PUBLISHER,
          CNT
        ) VALUES (
          B_ID,
          B_NAME,
          B_WRITER,
          B_PRICE,
          B_GENRE,
          B_PUBLISHER,
          B_CNT
        );
      COMMIT; --커밋
    END LOOP; --루프 종료
  CLOSE CSOR; --커서 닫기
 
END;
/
--프로시져 생성 종료




[프로시져 실행]


1
2
--프로시져 실행
EXECUTE PRO_BACKUP_BOOK(1);




반응형

'DB > Oracle' 카테고리의 다른 글

ORACLE TRUNC DATE  (0) 2015.02.06
Oracle synonym (시노님 동의어)  (0) 2015.02.05
Oracle 테이블 구조 및 설명 보기  (0) 2015.02.05
Oracle COMMENT (추가, 확인)  (0) 2015.02.05
Oracle 숫자형 함수 (ROUND, TRUNC, MOD, CEIL, FLOOR)  (0) 2015.02.02

관련글 더보기

댓글 영역