-
[Oracle] 오라클 - Function 생성 및 실행 방법Software Development/Database 2020. 10. 15. 20:37
오라클에서는 TO_DATE, CONCAT 등과 같은 내장함수가 있지만 사용자가 정의하여 사용할 수 있는 사용자 정의 함수(User Defined Function)를 생성할 수도 있다.
기본적인 함수를 만드는 문법은 아래와 같다.
CREATE OR REPLACE FUNCTION function_name (agr1 NUMBER) RETURN VARCHAR2 IS return_value VARCHAR(14); BEGIN SELECT data INTO return_value FROM TABLE WHERE sequence = arg1 and ROWNUM =1; RETURN return_value; END;
생성한 함수를 실행하는 방법은 아래와 같다.
SELECT function_name(1000413) FROM dual;
위의 방법은 Function 반환 결과가 1 Row 1 Column 일때 사용할 수 있다. 그러나 여러개의 Row와 여러개의 Column을 반환하려면 Oracle Table Function 또는 Pipelined Table Function을 사용해야 한다.
Oracle Table Function은 Result Set(Multi column + Multi Row)의 형태를 인자 값으로 받아들여 값을 Return할 수 있는 PL/SQL Function이다.
Pipelined Table Function은 Oracle Table Function과 비슷하지만 전체 집합을 한 번에 처리하지 않고 Row 단위로 한 건씩 처리할 수 있다.
Pipelined Table Function을 가지고 예제를 만들어 본다.
1. Return 받을 Object Type 생성
CREATE OR REPLACE TYPE test_type AS OBJECT ( sn NUMBER, yyyymmdd VARCHAR2(16) );
2. Object Type을 가지는 Collection Type 생성
CREATE OR REPLACE TYPE test_table AS TABLE OF test_type;
3. Pipelined Table Function 생성
CREATE OR REPLACE FUNCTION test_func_2 (sn NUMBER) RETURN test_table PIPELINED IS t_type test_type; BEGIN FOR rec IN ( SELECT sn , yyyymmdd FROM data_table WHERE sequence = sn ) LOOP t_type := test_type(rec.sn, rec.yyyymmdd); PIPE ROW(t_type); END LOOP; RETURN; END;
Pipelined Table Function를 실행하는 방법은 아래와 같다.
SELECT * FROM TABLE(test_func_2(1000413));
References:
kyh0714.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-Function-%EC%8B%A4%ED%96%89%EB%B0%A9%EB%B2%95
'Software Development > Database' 카테고리의 다른 글
[데이터 중심 애플리케이션] 저장소와 검색 (0) 2021.09.05 [MongoDB] 몽고디비 정리 (0) 2021.07.07 [Database] 인덱스 자세히 알아보기 (0) 2020.08.19 ORA-01654 인덱스를 확장할 수 없습니다 (0) 2020.07.09 Oracle - 반드시 알아야 하는 오라클 힌트절 7가지 (0) 2020.04.08