동적 기능을 만들었습니다. 동적으로 테이블 이름의 일부를 얻습니다. 함수가 성공적으로 생성되었습니다. 하지만 함수를 실행할 때. 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 함수를
select * from dwgcould.getlatlngcenter(2000653);
CREATE OR REPLACE FUNCTION dwgcould.getlatlngcenter(IN pro_id integer,
OUT lat_center double precision, OUT lng_center double precision)
AS $$
BEGIN
EXECUTE 'SELECT st_x(st_centroid( st_transform(geom,4326))) as lng_center ,st_y(st_centroid( st_transform(geom,4326))) as lat_center
FROM dwgcould.adpes_v1_' || quote_ident(pro_id) || '_line limit 1';
END;
$$ LANGUAGE plpgsql;
오류 코드는
오류 : quote_ident (integer) 함수가 존재하지 않습니다. LINE 2 : FROM dwgcould.adpes_v1_ '|| quote_ident (pro_id) || '_line ... ^ 힌트 : 주어진 이름 및 인수 유형과 일치하는 함수가 없습니다. 명시 적 유형 캐스트를 추가해야 할 수도 있습니다. 쿼리 : SELECT 'SELECT st_x (st_centroid (st_transform (geom, 4326))) as lng_center, st_y (st_centroid (st_transform (geom, 4326))) as lat_center FROM dwgcould.adpes_v1_'|| quote_ident (pro_id) || '_line limit 1'CONTEXT : PL / pgSQL function dwgcould.getlatlngcenter (integer) line 4 at EXECUTE statement ********** Error ********** ERROR : function quote_ident (integer) 존재하지 않음 SQL 상태 : 42883 힌트 : 주어진 이름 및 인수 유형과 일치하는 함수가 없습니다. 명시 적 유형 캐스트를 추가해야 할 수도 있습니다. 컨텍스트 : PL / pgSQL 함수 dwgcould.getlatlngcenter (integer) 4 행 EXECUTE 문
또한 테이블이 존재하는지 어떻게 확인할 수 있습니까?
더 나은 사용 형식, 예 :
CREATE OR REPLACE FUNCTION dwgcould.getlatlngcenter(IN pro_id integer,
OUT lat_center double precision, OUT lng_center double precision)
AS $$
BEGIN
if (select count(1) from pg_tables where tablename = format('adpes_v1_%s_line',pro_id)) < 1 then
raise info '%','NO SUCH TABLE!';
return;
end if;
EXECUTE format('SELECT * FROM dwgcould.adpes_v1_%s_line limit 1',pro_id) into lat_center,lng_center;
return;
END;
$$ LANGUAGE plpgsql;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다