> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL 함수에서 SELECT 쿼리 결과를 올바르게 반환하는 방법은 무엇입니까?

PostgreSQL 함수에서 SELECT 쿼리 결과를 올바르게 반환하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-17 10:32:14
원래의
122명이 탐색했습니다.

How to Correctly Return SELECT Query Results from a PostgreSQL Function?

PostgreSQL 함수에서 SELECT 쿼리 결과 반환

PostgreSQL에서 함수를 사용하여 SELECT 쿼리 결과를 반환하려면 적절한 구문과 반환 유형을 이해해야 합니다. 제공된 기능 중 하나를 검사하고 쿼리 결과를 올바르게 검색하는 방법을 안내해 드리겠습니다.

문제의 함수 wordFrequency에는 현재 올바른 반환 문이 없습니다. 이 문제를 해결하기 위해 RETURN QUERY 구문을 사용합니다.

수정된 기능:

<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer)
RETURNS SETOF RECORD AS $$
BEGIN
  RETURN QUERY
  SELECT text, count(*), 100.0 / _max_tokens * count(*) AS ratio
  FROM (
    SELECT text
    FROM token
    WHERE chartype = 'ALPHABETIC'
    LIMIT _max_tokens
  ) AS tokens
  GROUP BY text
  ORDER BY count DESC;
END;
$$ LANGUAGE plpgsql;</code>
로그인 후 복사

핵심사항:

  • RETURN QUERY 구문을 사용하면 SELECT 쿼리 결과를 직접 반환할 수 있습니다.
  • SETOF RECORD은 함수가 일련의 레코드를 반환함을 나타냅니다.
  • 함수 본문의 출력 매개변수(예: textcount(*))는 쿼리의 열 이름과 일치해야 합니다. 세 번째 열에 명확한 이름을 부여하고 모호성을 피하기 위해 AS ratio을 추가했습니다. 동시에 정수 나누기로 인한 정밀도 손실을 방지하려면 100100.0으로 변경하세요.

통화 기능:

<code class="language-sql">SELECT * FROM wordFrequency(123);</code>
로그인 후 복사

또한 RETURNS TABLE을 사용하여 반환 유형을 명시적으로 정의하면 모든 함수 호출에 대해 열 정의 목록을 지정할 필요가 없으므로 일반 레코드를 반환하는 것보다 더 실용적입니다. 예:

<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer)
RETURNS TABLE (text TEXT, cnt BIGINT, ratio NUMERIC) AS $$
BEGIN
  RETURN QUERY
  SELECT text, count(*), 100.0 / _max_tokens * count(*)
  FROM (
    SELECT text
    FROM token
    WHERE chartype = 'ALPHABETIC'
    LIMIT _max_tokens
  ) AS tokens
  GROUP BY text
  ORDER BY count DESC;
END;
$$ LANGUAGE plpgsql;</code>
로그인 후 복사

중요 사항:

  • 쿼리의 열 이름과 충돌하지 않도록 출력 매개변수 이름을 신중하게 선택하세요.
  • SELECT 목록에서 항목의 순서 위치를 사용하거나 ORDER BY에서 표현식을 반복하여 잠재적인 이름 충돌을 해결하세요.
  • 반올림 오류를 최소화하려면 정수가 포함된 계산에서 나누기 전에 숫자 데이터 유형을 사용하거나 곱셈을 고려하세요.

이러한 단계를 따르면 PostgreSQL의 함수를 효율적으로 사용하여 SELECT 쿼리 결과를 반환할 수 있습니다.

위 내용은 PostgreSQL 함수에서 SELECT 쿼리 결과를 올바르게 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿