Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan ORDER BY dan LIMIT Berparameter dengan Cekap dalam Fungsi Jadual PostgreSQL?

Bagaimana untuk Melaksanakan ORDER BY dan LIMIT Berparameter dengan Cekap dalam Fungsi Jadual PostgreSQL?

DDD
Lepaskan: 2024-12-30 22:50:15
asal
252 orang telah melayarinya

How to Efficiently Implement Parameterized ORDER BY and LIMIT in PostgreSQL Table Functions?

Tertib Berparameter Mengikut dan Had dalam Fungsi Jadual PostgreSQL

Fungsi SQL tersuai, dinamakan getStuff, telah dicipta untuk melaksanakan pernyataan SELECT asas. Apabila menggunakan fungsi dalam bentuk pilih * daripada getStuff('hello'), ia mengambil semua baris daripada jadual bahan berdasarkan nilai parameter yang disediakan.

Walau bagaimanapun, persoalan timbul: bagaimana kita boleh melaksanakan pesanan dan mengehadkan dalam fungsi ini untuk meningkatkan kecekapan dan mendapatkan hanya baris yang dikehendaki? Menggunakan susunan mengikut dan menghadkan klausa secara terus dalam fungsi getStuff akan menjadi tidak cekap kerana ia melibatkan pengambilan semua baris sebelum menggunakan penapis.

Penyelesaian yang disyorkan ialah menggunakan PL/pgSQL, bahasa prosedur dalam PostgreSQL, untuk mencipta fungsi. PL/pgSQL membolehkan pembinaan dan pelaksanaan pertanyaan SQL dinamik, memberikan fleksibiliti dalam mengendalikan nilai parameter.

Fungsi contoh dalam PL/pgSQL:

CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int)
RETURNS SETOF stuff AS
$func$
BEGIN
   RETURN QUERY EXECUTE '
      SELECT *
      FROM   stuff
      WHERE  col = 
      ORDER  BY ' || quote_ident(_orderby) || ' ASC
      LIMIT  '
   USING _param, _limit;
END
$func$  LANGUAGE plpgsql;
Salin selepas log masuk

Fungsi ini mengambil tiga parameter: _param (nilai untuk ditapis mengikut), _orderby (lajur untuk diisih mengikut), dan _had (bilangan maksimum baris untuk kembali).

Untuk memanggil fungsi:

SELECT * FROM get_stuff('hello', 'col2', 100);
Salin selepas log masuk

Dengan menggunakan RETURN QUERY EXECUTE, hasil pertanyaan SQL yang dibina dikembalikan dalam satu kelompok. quote_ident melindungi terhadap suntikan SQL dengan melarikan diri dari pengecam. Parameter dihantar melalui USING untuk mengelakkan suntikan SQL dan kemungkinan isu penghantaran/petik.

Untuk pertanyaan yang lebih kompleks, pertimbangkan untuk menggunakan fungsi format().

Walaupun fungsi SQL mungkin sesuai untuk operasi mudah , PL/pgSQL menawarkan fleksibiliti dan keupayaan pengoptimuman yang lebih besar apabila mengendalikan klausa ORDER BY dan LIMIT berparameter dalam jadual fungsi.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan ORDER BY dan LIMIT Berparameter dengan Cekap dalam Fungsi Jadual 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan