1. 함수생성
개발환경 : DBeaver22.3.2
function 생성하면 아래와같이 기본적으로 생성된다
CREATE OR REPLACE FUNCTION 함수명()
RETURNS int4
LANGUAGE sql
AS $function$
begin
함수내용
END;
$function$
;
만약 변수를 사용하고싶다면
Language를 plpgsql로 변경해야함!
2. 변수
1) language 설정
declare 에 변수선언을 하려면
language를 plpgsql로 변경해야함
CREATE OR REPLACE FUNCTION 함수명()
RETURNS int4
LANGUAGE plpgsql
AS $function$
declare
변수 타입;
begin
함수내용
END;
$function$
;
2) 변수 선언
declare 아래에 작성하면됨
CREATE OR REPLACE FUNCTION 함수명()
RETURNS int4
LANGUAGE plpgsql
AS $function$
declare
name varchar;
age numeric;
time timestamp;
begin
함수내용
END;
$function$
;
3) 변수 값지정
begin과 end 사이에서 작성하면 됨
begin
select a into 변수명
from 테이블;
또는
select a
from 테이블
into 변수명;
또는
변수명 := 값;
end
3. 테스트 로그출력
변수안에 든 값이 어떤값으로 나오고있는지 확인하려면
우선 함수를 저장한 후에
새 script 를 생성후 select 함수명(); 을 통해 실행하면
raise info에서 설정한 값이 출력되는데
% 가 변수를 지칭하는 표현이다
RAISE INFO '문자열 %',변수;
info말고도 NOTIC, WARNING 이 있다
RAISE INFO
: Function 실행시, 파라미터값 표시할때, Function 내 여러 쿼리가 있을 경우 위치를 표시할때
RAISE NOTICE
: Temp Table을 생성하거나 Analyze, Vacuum 같이 관리를 위한 구문실행시 사용
추후 문제가 생기는 상황을 예측할 수 있을때 공지하는 용도로 사용
RAISE WARNING
:Function 실행이 특정조건 때문에 더 이상 진행되지 않을때 사용하여 정확한 경고를 주는 경우에 사용
- 참조하는 테이블에 데이터가 없거나 데이터를 생성할 수가 없는 상황을 알려주는 용도로 사용
- 파라미터의 값이 허용하는 조건에 맞지 않아 Function 을 진행할 수 없을때 사용
4. 사용법
select 함수명()
5. 예제코드
CREATE OR REPLACE FUNCTION "NAISYS".func_insert_itl_abac_control_sub()
RETURNS int4
LANGUAGE plpgsql
AS $function$
declare
msurDt timestamp;
t numeric;
minsrt1 numeric;
minsrt2 numeric;
begin
/* select 방식*/
select INTEL1.tag_6 FROM sbswco_meas_mstr04 MS
LEFT JOIN (
SELECT *
FROM "NAISYS".sbswco_meas_mstr04
WHERE MEAS_DTM BETWEEN TO_TIMESTAMP(TO_CHAR(CURRENT_TIMESTAMP - '5MINUTES'::INTERVAL, 'YYYY-MM-DD HH24:MI'), 'YYYY-MM-DD HH24:MI') AND CURRENT_TIMESTAMP
AND RCS_ID = 'INTEL1'
AND DATA_TYP = 'AI'
) INTEL1 ON INTEL1.MEAS_DTM = MS.MEAS_DTM
order by MS.meas_dtm desc limit 1
into t;
/* 직접대입 방식*/
minsrt1 := 20;
minsrt2 := minsrt1 + 222;
/*--------------------------------------------------------------------------------------------------------------- */
/*데이터 최종 INSERT 문*/
INSERT INTO "NAISYS".sbswrt_itl_abac_control_sub (
msur_dt,
min_srt1,
min_srt2,
) VALUES(
msurDt,
nh3sp1,
nh3sp2,
) ON CONFLICT (msur_dt) DO NOTHING;
RAISE NOTICE '값은 %', nh3sp1;
END;
$function$
;
참고한 블로그
https://wylee-developer.tistory.com/61
[Greenplum] Function 개발 및 디버깅을 위한 RAISE 로깅 사용방법
Greenplum Function 을 개발하다보면 실행이력/에러내역등 로그를 남겨 확인해야 할 상황이 있을 것이다. 이럴때 사용하는 것이 RAISE 구문이며 DBeaver Tool을 사용하면 Output 창에 로그내용을 표시할 수
wylee-developer.tistory.com
'서버&백엔드 > 🗃️ DataBase' 카테고리의 다른 글
PostgreSQL | 쿼리 성능 분석하기 (1) | 2024.07.03 |
---|---|
추출한 CSV파일 채우기 드래그 한번에 하기 (0) | 2024.06.30 |
MyBatis XML 매퍼작성시 부등호(<=, >=, <, >) 유의사항 (0) | 2024.06.12 |
postgresSQL | 나누기할때 분모 0 나올경우 주의할 점 (0) | 2024.06.12 |
MyBatis | DAO => XML 파라미터넘길때 여러방법들 (0) | 2024.03.15 |