Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Hasil Pertanyaan daripada Fungsi PostgreSQL?

Bagaimana untuk Mengembalikan Hasil Pertanyaan daripada Fungsi PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-17 10:16:21764semak imbas

How to Return Query Results from a PostgreSQL Function?

Kembalikan hasil pertanyaan dalam fungsi PostgreSQL

PostgreSQL menggunakan pernyataan RETURN QUERY untuk mengembalikan hasil pertanyaan dari dalam fungsi. Kaedah ini amat berguna apabila anda memerlukan hasil pertanyaan sebagai sebahagian daripada output fungsi.

Contoh

Pertimbangkan fungsi berikut:

<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>

Fungsi ini cuba mengembalikan hasil pertanyaan, tetapi tiada bahagian penting: pernyataan RETURN QUERY.

Penyelesaian

Untuk mengembalikan hasil pertanyaan, gunakan pernyataan RETURN QUERY seperti berikut:

<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>

Laksanakan

Untuk melaksanakan fungsi ini, anda boleh menggunakan pernyataan berikut:

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

Ini akan mengembalikan jadual yang mengandungi token teks, kiraan dan nisbah untuk setiap perkataan dalam jadual.

Nota

  • Gunakan parameter OUT: Parameter OUT yang ditakrifkan dalam pengepala fungsi mesti betul-betul sepadan dengan lajur yang dikembalikan oleh pertanyaan.
  • Namakan parameter OUT dengan teliti: Gunakan nama yang tidak jelas untuk mengelakkan kemungkinan konflik penamaan. Elakkan menggunakan perkataan terpelihara atau jenis data primitif.
  • Gunakan kurungan untuk pembahagian integer: Apabila membahagi integer, sertakan operasi bahagi dalam kurungan untuk meminimumkan ralat pembundaran.
  • Pertimbangkan jenis data berangka: Untuk operasi yang melibatkan nombor atau peratusan titik terapung, menggunakan jenis data berangka memberikan ketepatan yang lebih tinggi.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Hasil Pertanyaan daripada Fungsi PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn