[Oracle] PL/SQL - FUNCTION

SungminPark·2023년 12월 25일

SQL

목록 보기
4/5
post-thumbnail

📄 Function이란?


  • 사용자 정의 함수
  • 특정 기능들을 모듈화, 재사용 할 수 있어 복잡한 쿼리문을 간결하게 만들 수 있다.
    • 속도를 느리게 만들 수 있어 무분별한 사용은 자제해야 한다.
  • 호출한 곳으로 반드시 하나의 값을 리턴해줘야한다.
    • PL/SQL블록 내에서 return 문을 통해 반드시 값을 리턴해 주어야 한다.
  • 프로시저는 PL/SQL문으로 실행 하지만, 함수는 식의 일부로서 사용한다.
  • 함수 작성시 권한필요

📄 기본 문법


CREATE [OR REPLACE] FUNCTION function_name [(
    argument...
)] RETURN datatype -- 반환되는 값의 datatype     
IS [AS]         
	[선언부]     
BEGIN         
	[실행부 - PL/SQL Block]     
   [EXCEPTION]        
    [EXCEPTION 처리]    
RETURN 변수; -- 리턴문 필수 END;
END;

[OR REPLACE] : 기존 내용을 재생성한다. 보통 생략하지 않고 같이 사용한다.
argument : 변수명 (변수명 IN VARCHAR2)의 형식으로 이름과 타입을 지정한다.

📝 함수사용 예시


CREATE OR REPLACE FUNCTION fu_sum_gugu( vn_row NUMBER )
RETURN NUMBER
IS
  vn_gugu_sum NUMBER := 0;
BEGIN
  FOR i in 1..9
    LOOP
     vn_gugu_sum := vn_gugu_sum + (vn_row * i);
    END LOOP;
    RETURN vn_gugu_sum;
END;

간단한 구구단 예시이다. 단 번호를 넘겨주면 해당 단의 합계를 반환한다.

SELECT fu_sum_gugu(1) FROM dual;

✏️ 함수와 프로시져의 차이


함수 => 매개변수 존재 / 반환값 존재
프로시져 => 매개변수 존재 / 반환값 없음

함수는 기본적으로 SQL문 안에서 사용해야 한다.

프로시저 예시


CREATE OR REPLACE PROCEDURE 프로시저 이름

( 매개변수명1[ IN | OUT | IN OUT ] 데이터타입[:= 디폴트값],

  매개변수명2[ IN | OUT | IN OUT ] 데이터타입[:= 디폴트값], ... )

IS[AS]

변수, 상수 등 선언

BEGIN

실행

[EXCEPTION 예외처리부]

END [프로시저 이름]
IN : 매개변수가 프로시저 내부로 전달되면 연산에만 사용되고 더이상 반환되지 않는다.
OUT : 프로시저 내부로 전달되지는 않지만 프로시저가 해당 변수의 참조를 통해 호출한 곳으로 값을 전달 할 수 있다.
IN OUT : 프로시저 내부로 전달하여 연산에 사용하고 호출한 곳에서 참조를 통해 값을 전달 받을 수 있다.

프로시저 실행


EXEC (혹은 EXECUTE) 프로시저명 (매개변수1... 매개변수2...)

return 문을 사용하면 프로시저의 실행을 해당 시점에서 종료 시킬 수 있다. 조건문으로 분기시켜 로직을 수행할때 자주 사용한다.

profile
개발자 준비 중 입니다

0개의 댓글