개발공작소
article thumbnail
728x90
반응형

 

 

 

 

LOOP문 내에서 프로시저를 호출하는데, 계속 에러가 발생하길래 확인을 하면서

많은 시간을 날렸다.. 간단한거였는데.. 그래서 정리해봄..

 

1. 에러내용

SQL Error [42601]: 오류: 쿼리에 결과 데이터의 대상이 없음
Hint: SELECT의 결과를 취소하려면 대신 PERFORM을 사용하십시오.
Where: PL/pgSQL 함수 "dkasjmp.duplicate_sj_safe_child(text,text,text,text,text)" 의 17번째 SQL 문

 

 

2. 프로시저 쿼리문

<sql />
CREATE OR REPLACE FUNCTION public.my_procedure(target_num text) RETURNS integer LANGUAGE plpgsql AS $function$ declare rec RECORD; BEGIN FOR rec IN SELECT fclt_nm FROM public.temp_table loop select public.other_procedure(target_num); END LOOP; return 0; END; $function$ ;

 

 

3. 해결방법

 

 

에러문구에서 이미 정답을 말해주고 있다.. 에러문구를 자세히 보면 SELECT대신 PERFORM을 쓰라고 한다...

프로시저 호출시 SELECT대신 PERFORM을 사용하도록 하자.

 

<sql />
SELECT PUBLIC.PROCEDURE() => X PERFORM PUBLIC.PROCEDURE() => O

 

 

수정 쿼리문

<sql />
CREATE OR REPLACE FUNCTION public.my_procedure(target_num text) RETURNS integer LANGUAGE plpgsql AS $function$ declare rec RECORD; BEGIN FOR rec IN SELECT fclt_nm FROM public.temp_table loop PERFORM public.other_procedure(target_num); END LOOP; return 0; END; $function$ ;

 

 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!