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

Bagaimana untuk Mengembalikan Hasil Pertanyaan SELECT dalam Fungsi PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-17 10:21:12
asal
984 orang telah melayarinya

How to Return the Result of a SELECT Query within a PostgreSQL Function?

Memulangkan Data daripada Pertanyaan SELECT PostgreSQL dalam Fungsi

Panduan ini menangani cabaran biasa untuk mengembalikan hasil pertanyaan SELECT dalam fungsi PostgreSQL. Perkara utama ialah memahami cara mentakrifkan jenis pulangan dengan betul dan menggunakan sintaks yang sesuai.

Penyelesaian RETURN QUERY:

Kaedah yang paling berkesan ialah menggunakan perintah RETURN QUERY. Ini dengan jelas mentakrifkan lajur yang dikembalikan dan jenis datanya. Pertimbangkan contoh ini:

<code class="language-sql">CREATE OR REPLACE FUNCTION word_frequency(_max_tokens INT)
RETURNS TABLE (txt TEXT, cnt BIGINT, ratio NUMERIC)
AS $$
BEGIN
   RETURN QUERY
   SELECT t.txt, count(*) AS cnt, (count(*)::NUMERIC * 100) / _max_tokens AS ratio
   FROM (
      SELECT txt
      FROM token
      WHERE chartype = 'ALPHABETIC'
      LIMIT _max_tokens
   ) t
   GROUP BY t.txt
   ORDER BY cnt DESC;
END;
$$ LANGUAGE plpgsql;</code>
Salin selepas log masuk

Jenis pemulangan fungsi ini secara eksplisit ialah jadual dengan lajur txt, cnt dan ratio. Perhatikan penggunaan ::NUMERIC untuk tuangan jenis eksplisit bagi memastikan pengiraan nisbah yang tepat. Ketiadaan pernyataan RETURN yang berasingan adalah disengajakan; RETURN QUERY mengendalikan nilai pulangan.

Penamaan Berhati-hati:

Elakkan menamakan konflik antara parameter output dan nama lajur pertanyaan. Menggunakan kelayakan jadual (cth., t.txt) menghalang kekaburan.

Pendekatan Alternatif untuk Pengiraan Saham Relatif:

Untuk mengira bahagian relatif setiap token, alternatif menggunakan fungsi tetingkap menawarkan kecekapan yang lebih baik:

<code class="language-sql">CREATE OR REPLACE FUNCTION word_frequency(_max_tokens INT)
RETURNS TABLE (txt TEXT, abs_cnt BIGINT, relative_share NUMERIC)
AS $$
BEGIN
   RETURN QUERY
   SELECT txt, cnt, ROUND((cnt::NUMERIC * 100) / SUM(cnt) OVER (), 2) AS relative_share
   FROM (
      SELECT txt, COUNT(*) AS cnt
      FROM token
      WHERE chartype = 'ALPHABETIC'
      GROUP BY txt
      ORDER BY cnt DESC
      LIMIT _max_tokens
   ) t
   ORDER BY cnt DESC;
END;
$$ LANGUAGE plpgsql;</code>
Salin selepas log masuk

Versi ini menggunakan SUM(cnt) OVER () untuk mengira jumlah kiraan merentas semua baris, memberikan pengiraan bahagian relatif yang lebih ringkas.

Nota Penting:

Penyataan

Eksplisit RETURN tidak diperlukan apabila menggunakan RETURNS TABLE atau parameter output. Tingkah laku pemulangan fungsi ditakrifkan oleh klausa RETURNS dan pertanyaan itu sendiri.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan