귀하의 시나리오에서는 열 이름과 유형이 다르기 때문에 반환 유형이 변경됩니다. 이를 처리하려면 익명 레코드 유형을 반환하는 PostgreSQL의 기능을 활용할 수 있습니다.
<code class="language-sql">CREATE FUNCTION data_of(integer) RETURNS SETOF record AS ...</code>
그러나 이 접근 방식을 사용하려면 각 함수 호출에서 열 정의를 수동으로 지정해야 합니다.
<code class="language-sql">SELECT * FROM data_of(17) AS foo (colum_name1 integer , colum_name2 text , colum_name3 real);</code>
이러한 지루한 접근 방식을 피하려면 JSON 또는 XML과 같은 문서 데이터 유형을 사용하여 구조화되지 않은 데이터를 저장할 수 있습니다.
<code class="language-sql">CREATE FUNCTION data_of(integer) RETURNS JSONB AS ...</code>
그러나 이 접근 방식은 PostgreSQL 구조화된 데이터 유형의 장점을 희생하게 됩니다.
데이터 구조가 일관적인 경우(열 이름 제외) 이름이 정확하고 유형이 지정된 고정된 개수의 열을 반환할 수 있습니다.
<code class="language-sql">CREATE FUNCTION data_of(_id integer) RETURNS TABLE (datahora timestamp, col2 text, col3 text) AS $func$ ...</code>
단순화를 위해 각 열은 명시적으로 TEXT 유형으로 변환됩니다.
동일한 유형의 열이 여러 개 있는 경우 배열을 사용하여 값을 저장할 수 있습니다.
<code class="language-sql">CREATE FUNCTION data_of(_id integer) RETURNS TABLE (datahora timestamp, names text[], values float8[]) AS $func$ ...</code>
또한 열 이름을 배열로 반환할 수도 있습니다.
<code class="language-sql">CREATE FUNCTION data_of(_id integer) RETURNS TABLE (datahora timestamp, names text[], values float8[]) AS $func$ ...</code>
구조에 관계없이 테이블의 모든 열을 반환하려면 anyelement
의사 데이터 유형인
<code class="language-sql">CREATE FUNCTION data_of(_tbl_type anyelement, _id int) RETURNS SETOF anyelement AS $func$ BEGIN RETURN QUERY EXECUTE format(' SELECT * FROM %s -- pg_typeof returns regtype, quoted automatically WHERE id = ORDER BY datahora' , pg_typeof(_tbl_type)) USING _id; END $func$;</code>
원하는 테이블 유형의 NULL과 함께 이 함수를 호출하여 반환 유형을 동적으로 결정합니다.
<code class="language-sql">SELECT * FROM data_of(NULL::pcdmet, 17);</code>
위 내용은 다양한 열 이름과 유형을 사용하여 PostgreSQL에서 동적 SQL 반환 유형을 어떻게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!