[펌] PL/SQL 05

프로그래밍/DB 2007. 11. 27. 14:11 Posted by galad
출처 블로그 > 행운의 별자리님의 블로그
원본 http://blog.naver.com/kwakjt/26878643

 

1. 개요
  - 작업을 수행하는 명명된 PL/SQL블록.
  - 반복실행을 위한 DB 객체로서 DB에 저장.
  - 매개변수를 가질 수 있고 호출될 수 있음.
  - 머리말, 선언부, 실행부, 예외처리부로 구성.
  - 재이용성, 유지가능성을 높여줌

 

2. 구문
  Create [Or Replace] Procedure procedure_name
  (argument1 [mode1] datatype1,
   argument2 [mode2] datetype2, …)
   Is | As

   Begin

   [Exception]

   End [procedure_name];

 

   procedure_name 프로시저의 이름
   Argument   전달 인수 명
   Mode        인수의 유형
     IN(default)  input argument
     OUT          output argument
     INOUT        input/output argument
   Datatype   인수의 데이터 타입

 

3. SQL*PLUS 이용 프로시저 생성
  - 스크립트 파일 생성
    : Sql> ed[it] 파일명.sql
  - 프로시저 스크립트 생성 후 스크립트 파일 저장.
  - 프로시저 생성 및 컴파일
    : Sql> @파일명 또는 start 파일명
  - 컴파일 오류 발생시 오류 확인
    : Sql> show error [Procedure 프로시저명]
  - 프로시저 실행
    : Sql> execute 프로시저명(인수명)

 

4. 프로시저 생성 예
  SQL> ed raise_salary.sql

  Create Or Replace Procedure raise_salary
  (v_id in emp.empno%TYPE)
  IS
  Begin
     update emp
          set sal = sal * 1.10
     where empno = v_id;
  End raise_salary;
  /

 

  SQL>@raise_salary
  프로시저가 생성되었습니다.

 

  SQL> execute raise_salary(7369)
  PL/SQL 처리가 정상적으로 완료되었습니다

 

5. 매개변수 전달 방법
  - 다중의 매개변수를 가지는 프로시저에서 매개변수의 값을 지정하기 위한 위치(Positional), 명명(Named), 결합(Combination)의 방법을 이용할 수 있음.
  - 위치 : 선언된 매개변수의 순서로 값을 나열
  - 명명 : 특수구문(=>)을 이용하여 매개변수 이름과  짝을 이룸으로써 순서없이 값을 나열
  - 결합 : 위치, 명명의 나열방식으로 값을 나열

 

  Create Or Replace Procedure add_dept
  (v_deptno in dept.deptno%type,
   v_name   in dept.dname%type  default  'unknown',
   v_loc    in dept.loc%type  default  'unknown')
  IS
  Begin
     Insert into dept
       values (v_deptno, v_name, v_loc);
  End  add_dept;
  /

 

  Begin
    add_dept(41);
    add_dept(42, 'TRAINING','SEOUL'); 
    add_dept(v_loc=>'JEONJU', v_deptno=>43, v_name=>'EDUCATION');
    add_dept(44, v_loc=>'DALAS', v_name=>'PRODUCING');
  End;
  /

 

6. 프로시저 삭제
  - SQL*PLUS를 사용하여 :
    Drop Procedure procedure_name
  - 프로시저 삭제 예 :
    Drop Procedure raise_salary;
  - 롤백은 Drop Procedure같은 데이터 정의 언어(DDL) 명령어 실행 후에는 불가능.

 

 

'프로그래밍 > DB' 카테고리의 다른 글

[펌] mysql 명령어 모음  (0) 2007.11.27
07 PL/SQL  (0) 2007.11.27
[펌] PL/SQL 04  (0) 2007.11.27
[펌] PL/SQL 03  (0) 2007.11.27
[펌] PL/SQL 02  (0) 2007.11.27