dynamic table select with function
PostgreSQL에서 함수를 작성하는 방법은 크게 두 가지가 있습니다. 첫 번째는 SQL 함수를 작성하는 것이고, 두 번째는 PL/pgSQL 함수를 작성하는 것입니다. 이번에는 PL/pgSQL 함수를 작성하는 방법에 대해서 알아보도록 하겠습니다.
먼저, 함수를 생성할 때는 CREATE FUNCTION 문을 사용합니다. 그리고, 함수의 이름, 입력 매개변수, 반환 타입 등을 지정해야 합니다. 아래는 함수의 기본 구조입니다.
CREATE OR REPLACE FUNCTION 함수이름(매개변수)
RETURNS 반환타입
LANGUAGE plpgsql
AS $function$
BEGIN
-- 함수 내용
END;
$function$;
여기서, OR REPLACE는 함수가 이미 존재할 경우 대체하라는 의미입니다. 이를 사용하지 않으면 함수가 이미 존재할 경우 오류가 발생합니다.
그리고, LANGUAGE plpgsql은 PL/pgSQL 언어를 사용하겠다는 의미입니다. AS $function$과 $function$; 사이에는 함수 내용을 작성합니다.
위의 예시 함수를 살펴보면, p_searchstartdate와 p_searchenddate 두 개의 입력 매개변수가 있습니다. 이 함수는 스키마의 테이블에서 월별로 나뉘어져 있는 테이블에서 p_searchstartdate와 p_searchenddate 기간 동안 발송된 데이터를 조회하는 함수입니다.
SELECT TABLE_NAME as TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'text'
AND UPPER(TABLE_NAME) IN (
SELECT UPPER('SEND_DATA_LOG_' || TO_CHAR(DATE_TRUNC('MONTH', GENERATE_SERIES(START_DATE, END_DATE, INTERVAL '1 MONTH')), 'YYYYMM')) AS YEAR_MONTH
FROM (SELECT p_searchstartdate :: DATE as START_DATE, p_searchenddate :: DATE as END_DATE) T
)
위의 코드는 입력 매개변수로 받은 기간동안 해당되는 월의 테이블을 조회하는 코드입니다. 이 코드의 결과는 문자열로 반환되며, 이를 queryString 변수에 담습니다.
그리고, FOR ~ IN ~ LOOP 구문을 사용하여 각 월별 테이블에서 데이터를 조회하도록 합니다. 이때, UNION ALL을 사용하여 모든 데이터를 하나의 결과로 반환하도록 합니다.
마지막으로, RETURN QUERY EXECUTE 구문을 사용하여 동적으로 생성된 SQL 쿼리를 실행하도록 합니다. 이를 통해 결과 값을 반환하게 됩니다.
댓글 쓰기
0 댓글