Rumah >pangkalan data >Oracle >Cara menulis paging oracle

Cara menulis paging oracle

PHPz
PHPzasal
2023-04-21 10:10:271945semak imbas

Paging Oracle adalah keperluan yang sangat biasa, terutamanya apabila membangunkan aplikasi web dan API. Penomboran boleh mengurangkan penggunaan sumber pelayan dengan berkesan dan memberikan pengguna pengalaman yang lebih mesra. Jadi, bagaimanakah paging Oracle harus ditulis? Mari perkenalkan di bawah.

Pertama sekali, kita perlu menjelaskan keperluan kita. Katakan kita mempunyai jadual pesanan bernama pesanan, yang mengandungi banyak maklumat pesanan. Kami perlu menanyakan data nombor halaman yang ditentukan mengikut bilangan item tetap setiap halaman. Sebagai contoh, setiap halaman memaparkan 10 item dan menanyakan data pesanan pada halaman 3. Jadi, bagaimana untuk mencapainya? Seterusnya, kami akan memperkenalkan beberapa kaedah pelaksanaan secara terperinci.

1. Gunakan subquery untuk melaksanakan paging

Subquery ialah cara biasa untuk melaksanakan paging dalam Oracle, yang boleh dicapai dengan menggunakan ROWNUM. Idea asas ialah menggunakan ROWNUM dalam pertanyaan dalaman untuk mengisih, dan kemudian gunakan ROWNUM dalam pertanyaan luar untuk operasi halaman. Kodnya adalah seperti berikut:

SELECT * FROM (
  SELECT orders.*, ROWNUM rnum
  FROM (
    SELECT * FROM orders
    ORDER BY order_date DESC
  ) orders
  WHERE ROWNUM <= 30
) WHERE rnum >= 21;

Dalam kod di atas, pernyataan pertanyaan kami mengandungi tiga peringkat sarang. Pernyataan SELECT paling luar menggunakan klausa WHERE untuk menapis ROWNUM dan melaksanakan operasi paging. Pernyataan pertanyaan dalaman mengandungi pernyataan ORDER BY, yang digunakan terutamanya untuk mengisih data. Pernyataan SELECT paling dalam menentukan pesanan jadual yang ingin kami tanyakan.

2. Gunakan fungsi ROW_NUMBER() untuk melaksanakan paging

Cara lain untuk melaksanakan paging ialah menggunakan fungsi ROW_NUMBER(). Kaedah ini sangat berguna apabila kita perlu mengisih mengikut lajur tertentu. Kodnya adalah seperti berikut:

SELECT *
FROM (
  SELECT orders.*,
         ROW_NUMBER() OVER(ORDER BY order_date DESC) AS row_num
  FROM orders
) WHERE row_num BETWEEN 21 AND 30;

Dalam kod di atas, kami menggunakan fungsi ROW_NUMBER() untuk menjana row_num medan baharu, yang digunakan untuk menentukan kedudukan setiap rekod selepas mengisih. Kita boleh menggunakan klausa WHERE untuk menapis rekod dalam julat yang ditentukan.

3. Gunakan OFFSET-FETCH untuk melaksanakan paging

Selepas Oracle 12c, cara baharu untuk melaksanakan paging telah diperkenalkan, iaitu menggunakan pernyataan OFFSET-FETCH. Berbanding dengan dua kaedah sebelumnya, kaedah ini lebih intuitif dan ringkas, dan kodnya lebih mudah dibaca dan difahami. Kodnya adalah seperti berikut:

SELECT *
FROM orders
ORDER BY order_date DESC
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

Dalam kod di atas, kami menggunakan pernyataan OFFSET-FETCH untuk melaksanakan operasi paging. OFFSET digunakan untuk menentukan offset, iaitu, baris mana untuk memulakan pertanyaan; FETCH digunakan untuk menentukan bilangan baris untuk pertanyaan Kaedah ini boleh memudahkan penyataan pertanyaan dan meningkatkan kecekapan pertanyaan.

Ringkasnya, artikel ini memperkenalkan tiga cara untuk melaksanakan paging Oracle, termasuk menggunakan subquery, fungsi ROW_NUMBER() dan pernyataan OFFSET-FETCH. Setiap kaedah mempunyai senario yang berkenaan, dan kaedah pelaksanaan khusus juga sedikit berbeza. Kita boleh memilih kaedah yang sepadan untuk melaksanakan paging Oracle mengikut keperluan yang berbeza.

Atas ialah kandungan terperinci Cara menulis paging oracle. 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