[본문스크랩] PL/SQL (5) - 함수

오라클 | 2007. 12. 21. 15:27
Posted by 시반

 ###################################################################################################

#   source site : blog.naver.com/tangamjaelt

#   master : 강용운

#   email : tangamjaelt@korea.com

#   last release : 2007.05.18

###################################################################################################

 

함수를 사용하는 이유

1. 코딩량을 줄일 수 있다.

2. 함수를 이용하여 모듈 단위로 접근할 수 있다.

3. 반복해서 재사용 할 수 있다.

 

 

함수 정의

********************************************************************************************************************

FUNCTION 함수명 [(파라미터 {IN|OUT|IN OUT})]

            RETURN 반환데이터형 

IS|AS

            선언문

BEGIN

            실행문

(EXCEPTION)

            예외처리문

END 함수명;

/

********************************************************************************************************************

파라미터 IN/OUT : 함수 내부와 외부로 파라미터 전달

RETURN : 반환되는 데이터 형. 하나 이상의 RETURN문을 가질 수 있지만 오직 하나만 실행된다. 적어도 하나의 RETURN문은 존재.

IS | AS : 함수에 대한 변수를 지역적으로 설정.

BEGIN : 함수 안에 들어있는 문장의 실행을 시작.

EXCEPTION : 선택사항. 오류 발생시 적당한 처리를 할 수 있다.

END : 함수의 끝을 나타냄.

 

 

파라미터 정의하기

- 파라미터는 블럭에서 함수로 전달할 수 있는 값이다.

- 함수는 이 파라미터 값을 받아 일을 수행하고 결과를 반환하거나 반환하지 않을 수 있다.

- actual parameter : 실제 메모리에 저장된 파라미터 값

- formal parameter : actual parameter 에 대한 포인터

 

파라미터명 [MODE] 파라미터데이터형 [:= 값 | DEFAULT 값]

ex)  v_stuid  VARCHAR2

 

- MODE : 들어오는 파라미터를 제어하는 문장

      ① IN [NOCOPY] : 읽기전용 : 파라미터가 읽기 전용으로 되고, 값이 변경되는 것을 완전히 막을 수 있다.

      ② OUT [NOCOPY] : 쓰기전용 : 전달된 파라미터 값을 무시하고 함수 내에서 파라미터 값을 할당한다.

      ③ IN OUT [NOCOPY] : 읽기 또는 쓰기 : 파파미터를 제어. 함수를 종료할 때 함수내에서 작성된 값이 파라미터 값으로 할당된다.

- NOCOPY : 파라미터 값이 아주 큰 경우, 컴파일러에게 파라미터를 값이 아닌 참조(포인터)로 전달하라고 요청하는 힌트

 

 

파라미터에 값 할당하기

- 파라미터에 값을 할당하려면, := 또는 DEFAULT 를 사용한다.

- DEFAULT 를 사용하면 값을 지정하지 않으면 정해진 기본값으로 할당된다.

ex) 

v_txn_count NUMBER := 10

v_stuid VARCHAR2 DEFAULT '-'

 

 

반환 데이터형

- 함수를 사용할 경우 반드시 반환되는 데이터의 데이텨형을 정의하여야 한다.

 

 

예외 (Exception)

- 함수나 프로시저 처리 중 오류가 발생하였을 경우 적절한 처리를 위해 작성한다.

- 구문

********************************************************************************************************************

EXCEPTION

      WHEN OTHERS THEN

          ...

********************************************************************************************************************

 

 

스토어드 함수 (Stored Function)

- Stored Function 이란 PL/SQL 코드에서 호출할 수 있도록 데이터베이스에 저장된 함수.

- 일반 함수와 달리 stored 함수를 정의할 경우, CREATE [OR REPLACE] 를 사용하여 정의한다.

- 구문

********************************************************************************************************************

CREATE [OR REPLACE] FUNCTION 함수명 [ (파라미터 {IN | OUT | INOUT}) ]

         RETURN 반환데이터형

IS | AS

          선언문

BEGIN

          실행문

(EXCEPTION)

          에외처리문

END 함수명;

********************************************************************************************************************

 

 

[예제1] 파라미터가 없는 스토어드 함수 작성과 사용

********************************************************************************************************************

CREATE OR REPLACE FUNCTION mypi
     RETURN NUMBER
IS
BEGIN
     NULL;
     RETURN 3.14;
END mypi;
/

********************************************************************************************************************

 

 

 

SQL> SET SERVEROUTPUT ON;

********************************************************************************************************************

BEGIN

      DBMS_OUTPUT.PUT_LINE('mypi value is ' || mypi);

END;

/

********************************************************************************************************************

 

 

 

디버깅 (오류확인)

- 함수를 작성하다 Compile 에러가 발생하면 INVALID 상태가 되어 사용할 수 없다.

- show errors 명령으로 에러를 확인한다.

- 표시되는 숫자는 'LINE/COLUMN' 형식이며, 6/2 이라고 하면 6번째 줄에서 2번째 항목에 에러가 있다는 뜻.

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)