기본 콘텐츠로 건너뛰기

라벨이 PostgreSQL인 게시물 표시

PostgreSQL PL/pgSQL 함수 작성 완벽 가이드 — 기본 구조부터 동적 SQL까지 (dynamic table select with function)

PostgreSQL PL/pgSQL 함수 작성 완벽 가이드 — 기본 구조부터 동적 SQL까지 (dynamic table select with function) AI 생성 이미지: PostgreSQL PL/pgSQL 함수 작성 완벽 가이드 — 기본 구조부터 동적 SQL까지 (dynamic table select with function) 핵심 개념과 실무 중심 사용법 PostgreSQL 에서 함수를 만드는 방식은 크게 두 가지입니다. 간단한 연산이나 조회는 순수 SQL 함수로 처리할 수 있고, 복잡한 제어 흐름이나 반복, 예외 처리 등이 필요하면 PL/pgSQL 을 사용합니다. PL/pgSQL은 절차형 언어로서 조건문, 반복문, 지역 변수 같은 프로그래밍 요소를 제공해 복잡한 비즈니스 로직을 데이터베이스 안에서 직접 구현할 수 있습니다. 성능과 유지보수 측면에서 서버 측 로직을 적절히 분리하면 이점이 큽니다. 📘 1. 기본 함수 구조 PostgreSQL 함수는 CREATE FUNCTION 문을 통해 선언합니다. 기본 형태는 다음과 같고, 실제 구현은 반환 타입과 필요한 권한에 따라 달라집니다. CREATE OR REPLACE FUNCTION 함수이름(매개변수) RETURNS 반환타입 LANGUAGE plpgsql AS $function$ BEGIN -- 함수 내용 작성 END; $function$; OR REPLACE : 기존 함수를 안전하게 덮어씀 RETURNS : 스칼라 타입, 레코드, 테이블 형태 등 반환 타입 지정 LANGUAGE plpgsql : PL/pgSQL로 작성되었음을 명시 🔍 2. 예제 함수 - 기간 내 월별 테이블 조회 아래 예제는 두 개의 날짜 입력( p_searchstartdate , p_searchenddate )을 받아 해당 기간에 해당하는 월별 테이블 이름을 조회합니다. 실무에서는 월 단위로 파티...

PL/pgSQL RETURN QUERY EXECUTE 완전 정리 – RETURNS TABLE과 동적 쿼리 활용

PL/pgSQL RETURN QUERY EXECUTE 완전 정리 – RETURNS TABLE과 동적 쿼리 활용 AI 생성 이미지: PL/pgSQL RETURN QUERY EXECUTE 완전 정리 – RETURNS TABLE과 동적 쿼리 활용 PL/pgSQL로 함수를 만들다 보면 테이블 이름이나 조건을 런타임에 결정해야 할 때가 자주 있습니다. 이런 상황에서 동적으로 작성한 SQL을 실행해 결과를 함수 반환값으로 바로 돌려주는 문법이 RETURN QUERY EXECUTE 입니다. 이 글은 RETURN QUERY EXECUTE 의 개념과 기본 문법, 사용 예제, 안전한 파라미터 바인딩 방법, 그리고 실무에서 주의해야 할 점까지 핵심만 골라 정리합니다. 1. RETURN QUERY EXECUTE란 무엇인가? RETURN QUERY EXECUTE 는 함수 내부에서 문자열로 조립한 SQL 문을 실행하고, 그 실행 결과를 현재 함수의 결과 집합(Result Set)에 추가하는 구문입니다. 보통 RETURNS TABLE 이나 SETOF 형태의 함수에서 주로 사용합니다. 기본 형식 RETURN QUERY EXECUTE ' -- 여기에 동적 SQL 작성 SELECT ... '; 위 구조는 함수가 미리 정의한 컬럼 구조에 맞춰 행을 쌓아 반환합니다. 정적 쿼리를 쓸 때의 RETURN QUERY 와 달리 실행할 SQL을 런타임에 조합할 수 있다는 점이 핵심입니다. 2. 가장 기본적인 예제: 테이블 이름을 파라미터로 받기 다음 예제는 함수 인자로 전달된 table_name 을 이용해 해당 테이블의 id 와 name ...

JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)

JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환) AI 생성 이미지: JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환) eGovFramework 환경에서 PostgreSQL 집계 결과를 웹에 정확한 백분율로 보여주려면 몇 가지 실무 규칙을 따라야 합니다. 이 글은 데이터베이스 레벨의 형변환과 JSP에서의 포맷팅을 중심으로, "JSTL fmt:formatNumber로 백분율 처리하기 (SUM, COUNT 형변환)"에 대한 구체적인 방법을 정리합니다. 1. ❓ 문제 인식: SUM/COUNT 결과와 JSTL 연산의 충돌 PostgreSQL의 SUM() 이나 COUNT() 는 보통 정수형(BIGINT)이나 NUMERIC 타입으로 돌아옵니다. MyBatis(eGovMap 등)를 통해 JSP로 전달된 값으로 EL에서 나눗셈을 하면 의도치 않은 정수 연산이나 형 변환 오류가 발생할 수 있습니다. 현상: 정수끼리 연산하면 소수점 이하가 잘리거나, EL이 예상과 다른 타입으로 처리되어 백분율 계산이 틀리게 나옵니다. 예를 들어 ${total / denominator} 가 정수 나눗셈으로 처리되면 정확한 소수값을 얻을 수 없습니다. 따라서 백분율을 정확히 표시하려면 DB 또는 매핑 단계에서 실수 타입으로 보장하는 것이 안전합니다. 이 글은 "JSTL fmt:formatNumber로 백분율처리하기 (SUM, COUNT 형변환)"의 실무적 해법을 제시합니다. 2. 🛠️ 해결책: SQL 레벨에서 FLOAT/NUMERIC으로 형변환 가장 확실한 방법은 XML Mapper의 SQL에서 집계 결과를 명시적으로 실수 타입으로 변환하는 것입니다. ...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...