F(aTable TEXT)
은 테이블을 매개 변수로 사용하는 PL/pgSQL 함수입니다. 나는이 같은이 함수를 호출 할 때 :with 쿼리를 매개 변수로 PL/pgSQL 함수에 전달하는 방법은 무엇입니까?
with w as ( ... ) select * from F('w')
이 오류를 반환 :하지가 존재 승.
F(aTable TEXT)
은 테이블을 매개 변수로 사용하는 PL/pgSQL 함수입니다. 나는이 같은이 함수를 호출 할 때 :with 쿼리를 매개 변수로 PL/pgSQL 함수에 전달하는 방법은 무엇입니까?
with w as ( ... ) select * from F('w')
이 오류를 반환 :하지가 존재 승.
w
은 파생 테이블의 이름입니다 (CTE에서 생성 된 "공통 테이블"). 이것은 CTE가 첨부 된 DML 명령에서 독점적으로 볼 수있는 특수한 종류의 임시 테이블입니다. 일반 테이블 (전체적으로 볼 수 있음) 또는 임시 테이블 (동일한 세션 내에서 볼 수 있음)과 다른 시스템 카탈로그에는 항목이 없습니다.w
. 또한 인덱스를 만들거나 어떤 방식 으로든 수정할 수 없습니다.
F
함수는 text
매개 변수를 취합니다. 함수 정의를 비밀로 유지했지만 EXECUTE
인 동적 SQL을 내부에서 실행합니다. w
은 EXECUTE
안에 표시되지 않으므로이를 수행 할 방법이 없습니다.
임시 테이블을 대신 생성하십시오.
또는 더 나은 방법은 함수의 코드를 비롯하여 전체 쿼리를 통합하는 것입니다. 이것은 일반적으로 가장 빠릅니다.
대단히 감사합니다! 나는 배웠다. 마침내 나는 매개 변수로'w'의 모든 코드를 사용합니다. 이 함수는 여러 곳에서 사용될 것이므로 함수의 코드를 포함 할 수 없습니다. –