본문 바로가기
oracle/[SQL] PLSQL

6장. PL/SQL Sub program

by #moonyz 2014. 10. 16.

- 자주 사용되는 PL/SQL 블록에 저장해 두었다가 필요할 경우에 호출해서 사용할수 있도록 하는 프로그램.

- 프로시저(Procedure), 함수(Function), 패키지(Package), 트리거(Trigger)


- 익명블록

이름이 지정되지 않은 PL/SQL 블록

매번 사용시마다 컴파일

데이터베이스에 저장되지 않음

다른 응용프로그램에서 호출 불가능

값을 반환하지 않음

파라미터를 사용할수 없음


- 서브프로그램

이름이 지정된 PL/SQL 블록

최초 실행될때 한번만 컴파일됨

데이터베이스에 저장됨

다른 응용프로그램에서 호출 가능

함수일 경우 값을 반환

파라미터 사용 가능



1. 프로시저 (PROCEDURE)

- 특정 처리를 실행하는 서브프로그램의 한 유형

- 단독으로 실행되거나 다른 프로시저나, 툴 또는 다른 환경에서 호출되어 실행

- 처음 생성후 컴파일 할때 오브젝트로서 데이터베이스내에 저장

- 반복적으로 호출되어 실행될때 별도의 컴파일 없이 생성된 p-code로 바로 실행 가능

 

* 스크립트와 다른점

- @ 기호로 호출

- 실행 할때마다 컴파일한다 >> 부하가 걸릴 가능성이 있음



<프로시저 문법>


① OR REPLACE : 동일 프로시저명이 존재할 경우, 기존의 내용을 현재의 내용으로 수정 (삭제 후 다시 생성)

② 프로시저명 : 스키마 내에서 유일해야 한다.

③ Parameter 

호출환경과 프로시저간의 주고받을때 사용되는 매개변수, 데이터형 명시(크기는 X)

형식 파라미터 (Formal Parameter) : 선언부에 선언된 파라미터

실행 파라미터 (Actual Parameter) : 형식 파라미터에 실제 값이나 변수를 할당/대응 할때 사용하는 파라미터  

  EX) vempno IN emp.empno%TYPE --vempno 선언

④ 파라미터 모드 

IN : 사용자로부터 값을 입력받아 프로시저로 전달해주는 모드, 기본값, 생략가능

OUT : 다른 프로시저 등으로 전달하는 역할, 프로시저 내에서는 읽을수 없고 값을 저장하는 지역변수처럼 사용됨

IN OUT : 호출관경과 프로시저 간에 값을 주고받는 지역변수로 사용되며 읽기, 쓰기 모두 가능

 IN

OUT 

IN OUT 

 기본모드

 값이 서브프로그램에 전달됨

 형식 파라미터가 상수로 동작

 리터럴, 표현식, 상수, 초기화된 변수로 사용가능

 기본값을 할당할수 있음

 명시적으로 지정

 값이 호출환경에 반환

 초기화 되지 않은 변수

 변수만 사용가능

 기본값 할당 불가

 명시적으로 지정

 값이 호출환경에 반환 + 서브프로그램에 전달

 초기화된 변수

 변수만 사용가능

 기본값 할당 불가


⑤ USER_SOURCE : 프로시저 내용 확인 딕셔너리

⑥ SHOW ERRORS : 에러발생시 내용을 자세하게 바로 보여주지 않으므로 명령어 수행해야 함


실습1. emp테이블에서 부서번호가 20번인 사람들의 job을 'CLERK'으로 변경하는 프로시저


step1. emp 테이블에서 부서번호가 20번인 사람들 조회


step2. 부서번호가 20번인 사람들의 job을 'CLERK'으로 바꾸는 프로시저 생성후 실행

>> 부서번호가 20번인 사람들의 job이 모두 'CLERK'으로 바뀐것을 확인


실습2. 사번을 입력받아 급여를 인상하는 프로시저

(사용자로부터 값을 입력받아야 하므로 매개변수 사용)


step1. empno가 7902번인 사원 조회

>> sal : 3000


step2. 사원번호를 입력받을 변수를 선언한후 sal을 5000으로 변경하는 프로시저 작성

 >> 사원번호를 입력하여 프로시저 실행


step3. 프로시저 실행 후 입력받은 7902번 사원의 sal값이 변경되었는지 확인



실습3. 사번을 입력받아 그 사원의 이름과 급여를 출력하는 프로시저



실습4. OUT 모드 파라미터 사용 예



2. 함수 (Function)




3. 패키지 ( ORACLE Package )




4. 트리거 (Trigger)


'oracle > [SQL] PLSQL' 카테고리의 다른 글

5장. PL/SQL 예외처리  (0) 2014.10.16
4장. PL/SQL Cursor (커서)  (0) 2014.10.14
3장. PL/SQL 제어문  (0) 2014.10.14
2장. PL/SQL 변수  (0) 2014.10.14
1장. PL/SQL 시작  (0) 2014.10.14

댓글