개발공작소
article thumbnail
728x90

 

 

 

 

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

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

 

에러내용

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

 

 

해결방법

 

 

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

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

 

SELECT PUBLIC.PROCEDURE() => X
PERFORM PUBLIC.PROCEDURE() => O

 

 

수정 쿼리문

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

개발공작소

@모찌바라기

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