Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Keputusan Pertanyaan SELECT dengan betul daripada Fungsi PostgreSQL?

Bagaimana untuk Mengembalikan Keputusan Pertanyaan SELECT dengan betul daripada Fungsi PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2025-01-17 10:32:14124semak imbas

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

Kembalikan hasil pertanyaan SELECT dalam fungsi PostgreSQL

Dalam PostgreSQL, menggunakan fungsi untuk mengembalikan hasil pertanyaan SELECT memerlukan pemahaman sintaks yang sesuai dan jenis pulangan. Kami akan memeriksa salah satu fungsi yang disediakan dan membimbing anda tentang cara mendapatkan semula hasil pertanyaan dengan betul.

Fungsi yang dimaksudkan wordFrequency pada masa ini tidak mempunyai pernyataan pulangan yang betul. Untuk menyelesaikan masalah ini, kami akan menggunakan sintaks RETURN QUERY.

Fungsi yang diperbetulkan:

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

Isi penting:

    Sintaks
  • RETURN QUERY membolehkan anda mengembalikan secara langsung hasil pertanyaan SELECT.
  • SETOF RECORD menunjukkan bahawa fungsi akan mengembalikan satu set rekod.
  • Parameter output dalam badan fungsi (seperti text dan count(*)) mesti sepadan dengan nama lajur dalam pertanyaan. Kami menambah AS ratio untuk memberikan nama yang tidak jelas pada lajur ketiga dan mengelakkan kekaburan. Pada masa yang sama, tukar 100 kepada 100.0 untuk mengelakkan kehilangan ketepatan yang disebabkan oleh pembahagian integer.

Fungsi panggilan:

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

Selain itu, menggunakan RETURNS TABLE untuk mentakrifkan jenis pemulangan secara eksplisit adalah lebih praktikal daripada mengembalikan rekod generik kerana ia menghapuskan keperluan untuk menentukan senarai definisi lajur untuk setiap panggilan fungsi. Contohnya:

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

Nota Penting:

  • Pilih nama parameter output dengan berhati-hati untuk mengelakkan konflik dengan nama lajur dalam pertanyaan.
  • Gunakan kedudukan ordinal item dalam senarai PILIH atau ulangi ungkapan dalam ORDER BY untuk menyelesaikan kemungkinan konflik penamaan.
  • Pertimbangkan untuk menggunakan jenis data berangka atau mendarab sebelum membahagi dalam pengiraan yang melibatkan integer untuk meminimumkan ralat pembundaran.

Dengan mengikut langkah ini, anda boleh menggunakan fungsi dalam PostgreSQL dengan cekap untuk mengembalikan hasil pertanyaan SELECT.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Keputusan Pertanyaan SELECT dengan betul 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