Untitled_Blue

[SQL] 함수 (Function) 본문

Database/SQL

[SQL] 함수 (Function)

Untitled_Blue 2024. 5. 18. 21:24
반응형

안녕하세요. 이번 글은 함수에 대한 설명입니다.

- 함수란?

  • SQL문과 프로시저, 트리거에서 다양하게 사용가능하며 함수 안에 로직을 생성하여 사용하는 키워드
  • 프로그래밍 언어에 비유하면 메서드 (Method)와 유사한 개념
  • 프로시저와 다르게 IN 파라미터만 사용가능
  • 반드시 최소 하나의 값은 반환해야 하며 RETURN 키워드를 사용
CREATE [OR REPLACE] FUNCTION [함수명] (
	[변수명] IN [자료형],
    ...
    [변수명] IN [자료형]
)

RETURN [자료형]

IS
	[변수명] [자료형] := [값 또는 식];
BEGIN
	[내부 로직];
	RETURN [값 또는 식];
END;
/

함수를 구성하는 내부 로직은 상단과 같다. 첫 번째 라인에 있는 CREATE OR REPLACE [함수명]은 프로시저처럼 함수를 생성하면서 동일한 이름의 함수가 있으면 덮어쓰기처럼 대체하겠다는 키워드로 시작한다. 이후 파라미터를 지정하고 RETURN [자료형]을 통해 함수 실행 후 반환받을 값에 대한 자료형을 지정하며 BEGIN문 내부에 RETURN 옆에 반환 값 또는 식을 지정함으로써 반환 값을 설정하는 것을 끝으로 함수를 끝마치는 구조인 점을 확인할 수 있다. 삭제할 때는 DROP FUNCTION [함수명];을 사용하면 된다.

CREATE OR REPLACE FUNCTION TEST_FUNC_001 (
    BRITH IN NUMBER
)

RETURN NUMBER

IS
    TODAY DATE := SYSDATE;

BEGIN
    RETURN ROUND(TO_NUMBER(TODAY - TO_DATE(BRITH)) / 365, 1);
END;
/

상단의 PL/SQL문은 생년월일을 입력하면 작성자의 만 나이를 계산해주는 함수이다. 

DECLARE
    BIRTH NUMBER;
    RESULT VARCHAR2(100);
BEGIN
   BIRTH := 19960518;
   RESULT := TEST_FUNC_001(BIRTH);

   DBMS_OUTPUT.PUT_LINE('RESULT : ' || RESULT);
END;

함수를 실행해보면 다음과 같이 내부 로직에 의거하여 결과를 출력할 수 있는 점을 확인할 수 있다. 

SELECT TEST_FUNC_001(19960518) FROM DUAL;

하지만 DECLARE, BEGIN, END문을 사용해서 일일이 함수를 실행하기에는 상대적으로 번거롭다. 그래서 FROM DUAL을 통해 상단 쿼리문처럼 SQL문에서 함수를 선언해서 직접적으로 실행시킬 수도 있다. 차이점이 있다고 하면 PL/SQL문으로 실행하는 함수는 콘솔창에 결과가 출력되고 쿼리문에서 실행하는 함수는 테이블 형식으로 결과가 나오며 데이터 조회 및 처리할 때 상대적으로 다양하고 유연하게 적용시킬 수 있다는 점이 존재한다.

반응형

'Database > SQL' 카테고리의 다른 글

[SQL] 트리거 (Trigger)  (0) 2024.06.06
[SQL] 프로시저 (Procedure)  (0) 2024.05.15
[SQL] PL/SQL  (0) 2024.05.12
[SQL] 제약 조건  (0) 2024.05.06
[SQL] 테이블과 테이블을 연결하다. 조인 (Join)  (0) 2024.04.28