쿼리 결과를 반환하도록 PL/pgSQL 함수 수정
배경
처음에는 올바른 형식의 PostgreSQL SELECT 쿼리 문자열을 출력하는 함수를 생성합니다. 이제 생성된 SELECT 문을 데이터베이스에 대해 직접 실행하고 해당 결과를 검색하려고 합니다.
메서드: 동적 SQL 및 반환 유형
동적 SQL
동적 SQL을 실행하려면 EXECUTE 명령을 사용합니다. 커서를 사용하지 않으므로 RETURN QUERY EXECUTE 구문을 사용할 수 있습니다.
반품 유형
함수가 반환 유형을 선언해야 하기 때문에 문제는 정의되지 않은 유형의 레코드를 반환하는 것입니다. 데이터의 구체적인 특성에 따라 다양한 접근 방식을 고려할 것입니다.
고정 반환형을 이용한 간단한 솔루션
타임스탬프, 텍스트 및 텍스트 열에 대한 고정 반환 유형을 가정하면 다음과 같이 함수를 정의할 수 있습니다.
CREATE FUNCTION data_of(_id integer) RETURNS TABLE (datahora timestamp, col2 text, col3 text) AS $$ DECLARE _sensors text := 'col1, col2, col3'; _type text := 'foo'; BEGIN RETURN QUERY EXECUTE format( 'SELECT datahora, %s FROM %s WHERE id = ORDER BY datahora', _sensors, _type ) USING _id; END $$ LANGUAGE plpgsql;
동일한 유형의 다양한 열 수
가변 개수의 열이 있고 모든 열이 동일한 유형(예: double)인 경우 ARRAY 유형을 사용하여 값을 중첩할 수 있습니다.
CREATE FUNCTION data_of(_id integer) RETURNS TABLE (datahora timestamp, names text[], values float8[]) AS $$ DECLARE _sensors text := 'col1, col2, col3'; _type text := 'foo'; BEGIN RETURN QUERY EXECUTE format( 'SELECT datahora , string_to_array(, ',') -- AS names , ARRAY[%s] -- AS values FROM %s WHERE id = ORDER BY datahora', _sensors, _type ) USING _sensors, _id; END $$ LANGUAGE plpgsql;
다양한 완성형 테이블
테이블의 모든 열을 반환하려면 다형성 유형을 사용할 수 있습니다.
CREATE FUNCTION data_of(_tbl_type anyelement, _id int) RETURNS SETOF anyelement AS $$ BEGIN RETURN QUERY EXECUTE format( 'SELECT * FROM %I -- pg_typeof returns regtype, quoted automatically WHERE id = ORDER BY datahora', pg_typeof(_tbl_type) ) USING _id; END $$ LANGUAGE plpgsql;
참고: 두 번째 예에서 string_to_array
함수에는 구분 기호가 필요하며 ,
가 여기에 구분 기호로 추가됩니다. 세 번째 예에서는 %I
형식 지정 식별자를 사용하여 SQL 삽입을 방지하기 위해 보다 안전한 방법으로 테이블 이름을 처리합니다. 선택하는 방법은 특정 요구 사항과 데이터 구조에 따라 다릅니다. 가능하다면 테이블 구조와 원하는 결과에 대한 자세한 정보를 제공하시면 보다 정확하고 효율적인 솔루션을 제공하는 데 도움이 될 수 있습니다.
위 내용은 동적 SQL 쿼리 결과를 반환하도록 PL/pgSQL 함수를 어떻게 수정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 MySQL의 "공유 라이브러리를 열 수 없음"오류를 다룹니다. 이 문제는 MySQL이 필요한 공유 라이브러리 (.so/.dll 파일)를 찾을 수 없음에서 비롯됩니다. 솔루션은 시스템 패키지 M을 통한 라이브러리 설치 확인과 관련이 있습니다.

이 기사는 Docker에서 MySQL 메모리 사용을 최적화합니다. 모니터링 기술 (Docker Stats, Performance Schema, 외부 도구) 및 구성 전략에 대해 설명합니다. 여기에는 Docker 메모리 제한, 스와핑 및 CGroups와 함께 포함됩니다

이 기사는 MySQL의 Alter Table 문을 사용하여 열 추가/드롭 테이블/열 변경 및 열 데이터 유형 변경을 포함하여 테이블을 수정하는 것에 대해 설명합니다.

이 기사는 Linux에 MySQL을 직접 설치하는 것과 Phpmyadmin이없는 Podman 컨테이너 사용을 비교합니다. 각 방법에 대한 설치 단계에 대해 자세히 설명하면서 Podman의 격리, 이식성 및 재현성의 장점을 강조하지만 또한

이 기사는 자체 포함 된 서버리스 관계형 데이터베이스 인 SQLITE에 대한 포괄적 인 개요를 제공합니다. SQLITE의 장점 (단순성, 이식성, 사용 용이성) 및 단점 (동시성 제한, 확장 성 문제)에 대해 자세히 설명합니다. 기음

기사는 인증서 생성 및 확인을 포함하여 MySQL에 대한 SSL/TLS 암호화 구성에 대해 설명합니다. 주요 문제는 자체 서명 인증서의 보안 영향을 사용하는 것입니다. [문자 수 : 159]

이 안내서는 Homebrew를 사용하여 MacOS에 여러 MySQL 버전을 설치하고 관리하는 것을 보여줍니다. 홈 브루를 사용하여 설치를 분리하여 갈등을 방지하는 것을 강조합니다. 이 기사에는 설치, 서비스 시작/정지 서비스 및 Best Pra에 대해 자세히 설명합니다

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
