Post

PL/SQL Function

1. PL/SQL 함수 생성

procedure와 유사하게, PL/SQL 함수는 오라클 데이터베이스에 스키마 개체로 저장된 재사용 가능한 프로그램 단위이다. 다음은 함수를 만드는 구문을 보여 준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE [OR REPLACE] FUNCTION function_name (parameter_list)
    RETURN return_type
IS
[declarative section]

BEGIN

[executable section]

[EXCEPTION]

[exception-handling section]

END;

함수는 헤더와 바디로 구성된다.

함수 헤더에는 반환된 값의 데이터 형식을 지정하는 RETURN 절과 함수 이름이 있다. 기능의 각 파라미터는 IN, OUT 또는 INOUT 모드일 수 있다.

기능 바디는 선언적 섹션, 실행 가능한 섹션 및 예외 처리 섹션의 세 섹션으로 구성된 절차 본체와 동일하다.

  • 선언 섹션은 IS와 BEGIN 키워드 사이에 있다. 여기서 변수, 상수, 커서 및 사용자 정의 유형을 선언할 수 있다.

  • 실행 가능한 섹션은 BEGIN과 END 키워드 사이에 있다. 여기서 실행 가능한 문을 배치할 수 있다. procedure와 달리 실행 가능한 문에 RETURN 문이 하나 이상 있어야 한다.

  • 예외 처리 섹션은 예외 처리기 코드를 넣는 곳이다.

이 세 절에서는 실행 가능한 섹션만 필요하며 나머지 섹션은 선택 사항이다.

2. 함수 예제

다음 예제에서는 연도별 총 매출을 계산하는 함수를 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE FUNCTION get_total_sales (
    in_year PLS_INTEGER
)
RETURN NUMBER
IS
    l_total_sales NUMBER := 0;
BEGIN
    -- get total sales
    SELECT SUM(unit_price * quantity)
    INTO l_total_sales
    FROM order_items
    INNER JOIN orders USING (order_id)
    WHERE status = 'Shipped'
    GROUP BY EXTRACT(YEAR FROM order_date)
    HAVING EXTRACT(YEAR FROM order_date) = in_year;

    -- return the total sales
    RETURN l_total_sales;
END;

Oracle SQL Developer에서 기능을 컴파일하려면 아래 그림과 같이 Run Statement 버튼을 클릭한다.

function-compile

함수가 컴파일되면 기능 노드에서 찾을 수 있다.

function-list

3. 함수 호출

동일한 유형의 식을 사용하는 모든 위치에서 함수를 사용한다. 다음과 같은 다양한 위치에서 함수를 호출할 수 있다.

1) 할당 문

1
2
3
4
5
6
DECLARE
    l_sales_2017 NUMBER := 0;
BEGIN
    l_sales_2017 := get_total_sales (2017);
    DBMS_OUTPUT.PUT_LINE('Sales 2017: ' || l_sales_2017);
END;

2) 부울 표현식

1
2
3
4
5
BEGIN
    IF get_total_sales (2017) > 10000000 THEN
        DBMS_OUTPUT.PUT_LINE('Sales 2017 is above target');
    END IF;
END;

3) SQL 문

1
2
3
4
SELECT
    get_total_sales(2017)
FROM
    dual;

4. 함수 편집

기존 함수를 편집하고 다시 컴파일하려면 다음 단계를 수행한다.

  • 첫째: 편집할 함수 이름을 클릭한다.

  • 둘째: 코드를 편집한다.

  • 셋째: 컴파일 메뉴 옵션을 클릭하여 코드를 다시 컴파일한다.

function-edit-and-recompile

5. 함수 제거

DROP FUNCTION은 오라클 데이터베이스에서 함수를 삭제한다. 함수를 제거하기 위한 구문은 간단하다.

1
DROP FUNCTION function_name;

DROP FUNCTION 키워드는 삭제할 함수 이름이다.

예를 들어, 다음 명령문은 GET_TOTAL_SALES 함수를 삭제한다.

1
DROP FUNCTION get_total_sales;

Oracle은 GET_TOTAL_SALES 기능이 삭제되었음을 나타내는 메시지를 발행했다.

1
Function GET_TOTAL_SALES dropped.

SQL Developer를 사용하여 함수를 삭제하려는 경우 다음 단계를 사용할 수 있다.

  • 첫째: 삭제할 함수 이름을 마우스 오른쪽 버튼으로 누른다.

  • 둘째: Drop… 메뉴 옵션을 선택한다.

  • 셋째: Apply 버튼을 클릭하여 삭제를 확인한다.

function-drop

function-drop-confirmation

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.