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

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

Patricia Arquette
Patricia Arquette원래의
2025-01-17 10:16:21764검색

How to Return Query Results from a PostgreSQL Function?

PostgreSQL 함수로 쿼리 결과 반환

PostgreSQL은 RETURN QUERY 문을 사용하여 함수 내에서 쿼리 결과를 반환합니다. 이 방법은 함수 출력의 일부로 쿼리 결과가 필요할 때 특히 유용합니다.

다음 기능을 고려해보세요:

<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(maxTokens INTEGER)
  RETURNS SETOF RECORD AS
$$
BEGIN
  -- 执行查询
  SELECT text, count(*), 100 / maxTokens * count(*)
  FROM (
    SELECT text
    FROM token
    WHERE chartype = 'ALPHABETIC'
    LIMIT maxTokens
  ) AS tokens
  GROUP BY text
  ORDER BY count DESC;
END
$$
LANGUAGE plpgsql;</code>

이 함수는 쿼리 결과를 반환하려고 시도하지만 중요한 부분인 RETURN QUERY 문이 누락되었습니다.

솔루션

쿼리 결과를 반환하려면 다음과 같이 RETURN QUERY 문을 사용하세요.

<code class="language-sql">CREATE OR REPLACE FUNCTION word_frequency(_max_tokens int)
  RETURNS TABLE (txt   text    -- 函数体中显示为 OUT 参数
               , cnt   bigint
               , ratio bigint)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.txt
        , count(*) AS cnt                 -- 列别名仅在此查询中可见
        , (count(*) * 100) / _max_tokens  -- 添加了括号
   FROM  (
      SELECT t.txt
      FROM   token t
      WHERE  t.chartype = 'ALPHABETIC'
      LIMIT  _max_tokens
      ) t
   GROUP  BY t.txt
   ORDER  BY cnt DESC;
END
$func$;</code>

실행

이 기능을 실행하려면 다음 명령문을 사용할 수 있습니다.

<code class="language-sql">SELECT * FROM word_frequency(123);</code>

이렇게 하면 token 테이블의 각 단어에 대한 텍스트, 개수 및 비율이 포함된 테이블이 반환됩니다.

참고

  • OUT 매개변수 사용: 함수 헤더에 정의된 OUT 매개변수는 쿼리에서 반환된 열과 정확히 일치해야 합니다.
  • OUT 매개변수 이름을 신중하게 지정하세요. 잠재적인 이름 충돌을 방지하려면 명확한 이름을 사용하세요. 예약어나 기본 데이터 유형을 사용하지 마세요.
  • 정수 나누기에는 괄호 사용: 정수 나누기 작업에서는 반올림 오류를 최소화하기 위해 나누기 연산을 괄호로 묶습니다.
  • 숫자 데이터 유형 고려: 부동 소수점 숫자 또는 백분율과 관련된 연산의 경우 숫자 데이터 유형을 사용하면 정밀도가 더 높아집니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.