■ Data Skill ■/PL-SQL

PL/SQL (5) - 함수 (Function)

한길(One Way) 2023. 3. 17.

함수를 사용하는 이유

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번째 항목에 에러가 있다는 뜻.

728x90

'■ Data Skill ■ > PL-SQL' 카테고리의 다른 글

PL/SQL (7) - 조건문, 반복문 사용  (0) 2023.03.17
PL/SQL (6) - 패키지 사용의 예  (0) 2023.03.17
PL/SQL (4) - 연산자  (0) 2023.03.17
PL/SQL (3) - 블럭 구조  (0) 2023.03.17
PL/SQL (2) - 데이터형  (0) 2023.03.17

댓글