필자는 테이블 moredata에 가입하려는 일반적인 상황이 있습니다. 간단한 예를 제공하기 위해, 내가 가진 상상 : moredata
이 동일하게 유지하면서테이블을 입력으로 사용하는 Postgresql 기능? plpgsql 함수에서 동적 SQL은 갈 수 있습니까?
SELECT *
FROM x
JOIN moredata d on x.yyyymmdd = d.yyyymmdd
x
이 달라질 수 있습니다. 코드를 재사용 할 수있는 좋은 방법은 무엇입니까? 위의 코드를 자동화하여 다른 테이블에 적용 할 수 있습니다 (예 : 'x'대신 'y'테이블에서 같은 작업 수행).
한 가지 방법은 테이블 이름에 따라 작동하는 동적 SQL을 사용하여 plpgsql 함수를 작성하는 것입니다. 같은 뭔가 :
CREATE FUNCTION joinmoredata(tblname text) RETURNS TABLE(...) AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT * FROM %I JOIN moredata on ...', tblname);
END;
$$ LANGUAGE plpgsql;
그러나 당신은 파생 테이블이나 CTE에 적용 할 수 없었다. 더 좋은 방법이 있습니까? 아니면 동적 SQL이 상황에서 코드를 재사용하는 가장 좋은 방법입니까?
(I 코드를 재사용 할 이유 주, 실제 쿼리는 SELECT * FROM x JOIN moredata d on x.yyyymmdd = d.yyyymmdd
보다 더 복잡한이 많이되는 것입니다.)
함수 반환 값은 무엇입니까? –
'x는 달라질 것입니다. '.. 정확히 어떻게? 각 테이블에 동일한 열이 있습니까? (유형, 이름, 번호)? 리턴 타입'RETURNS TABLE (...)'도 달라질 것인가? –
@ErwinBrandstetter'x'는 매번 동일한 열을 가지며 함수가 반환하는 테이블은 매번 동일한 열을 갖도록 표준화 될 수 있습니다. –