Rumah  >  Artikel  >  pangkalan data  >  Cara menulis paging dalam oracle

Cara menulis paging dalam oracle

PHPz
PHPzasal
2023-04-04 13:59:374780semak imbas

Oracle ialah sistem pengurusan pangkalan data hubungan yang sangat popular yang menyediakan fungsi bahasa SQL yang kaya, termasuk pernyataan OFFSET dan FETCH untuk halaman. Dalam pembangunan sebenar, kami sering perlu menggunakan halaman untuk mengoptimumkan kecekapan pertanyaan dan meningkatkan pengalaman pengguna. Artikel ini akan memperkenalkan cara melaksanakan fungsi paging dalam Oracle.

1. Gunakan ROWNUM untuk halaman

Oracle mempunyai lajur pseudo ROWNUM terbina dalam, yang memberikan nombor berangka dalam urutan dan boleh digunakan untuk operasi halaman. Kami boleh mendapatkan keseluruhan keputusan yang ditetapkan melalui pertanyaan, dan kemudian menggunakan ROWNUM untuk menapis data dengan nombor halaman dan nombor rekod yang ditentukan.

Sebagai contoh, katakan kita mempunyai jadual bernama PEKERJA dan perlu menanyakan halaman 2 dan memaparkan 10 rekod pada setiap halaman Anda boleh menggunakan pernyataan SQL berikut untuk melaksanakan paging.

SELECT *
FROM (
  SELECT ROWNUM rn, e.*
  FROM EMPLOYEE e
  WHERE ROWNUM <= :page * :pageSize
)
WHERE rn > (:page - 1) * :pageSize

Antaranya, :page dan :pageSize ialah parameter, menunjukkan nombor halaman yang akan ditanya dan bilangan rekod yang dipaparkan pada setiap halaman. Proses khusus pernyataan SQL ini adalah seperti berikut:

  1. Pertanyaan dalaman terlebih dahulu mengisih rekod dalam jadual PEKERJA mengikut saiz ROWNUM dan memberikan nombor ROWNUM kepada setiap rekod.
  2. Pertanyaan luaran kemudiannya beroperasi pada set hasil pertanyaan dalaman, menggunakan WHERE rn > (:page - 1) * :pageSize untuk menapis data dengan nombor halaman dan nombor rekod.

Memandangkan ROWNUM diperuntukkan selepas mengisih, pertanyaan dalaman mesti mengisih data dahulu, jika tidak, hasil halaman tidak akan ditentukan.

Perlu diambil perhatian bahawa jika hasil pertanyaan hanya mempunyai satu rekod, menggunakan pernyataan SQL di atas boleh menyebabkan keputusan yang ditetapkan menjadi kosong. Penyelesaiannya ialah menukar WHERE rn > (:page - 1) :pageSize kepada WHERE rn BETWEEN ((:page - 1) :pageSize + 1) DAN (:page * :pageSize).

2. Gunakan paging OFFSET dan FETCH

Bermula dari Oracle 12c, ia menyokong paging menggunakan pernyataan OFFSET dan FETCH. Kaedah ini tidak memerlukan penggunaan ROWNUM, dan sintaksnya lebih ringkas dan jelas. Berikut adalah contoh penggunaan OFFSET dan FETCH untuk melaksanakan paging:

SELECT *
FROM EMPLOYEE
ORDER BY emp_id
OFFSET (:page - 1) * :pageSize ROWS
FETCH NEXT :pageSize ROWS ONLY

Antaranya, :page dan :pageSize masing-masing mewakili nombor halaman yang hendak disoal dan bilangan rekod yang dipaparkan pada setiap halaman. Proses khusus pernyataan SQL ini adalah seperti berikut:

  1. Mula-mula susun rekod dalam jadual PEKERJA mengikut emp_id.
  2. OFFSET (:halaman - 1) * :pageSize ROWS menentukan bilangan baris untuk dilangkau, iaitu kedudukan rekod permulaan untuk disoal dalam jadual yang diisih.
  3. FETCH NEXT :pageSize ROWS SAHAJA menentukan bilangan rekod yang hendak disoal, iaitu bilangan rekod yang dipaparkan pada setiap halaman.

Berhati-hati apabila menggunakan pernyataan OFFSET dan FETCH untuk membuat pertanyaan Jika bilangan rekod yang ditanya kurang daripada satu halaman, hasil pertanyaan akan kosong. Dalam kes ini, kita perlu mengira secara manual bilangan rekod yang tinggal dan menapis menggunakan klausa WHERE.

3. Ringkasan

Di atas memperkenalkan dua kaedah untuk melaksanakan fungsi paging dalam pangkalan data Oracle: menggunakan ROWNUM dan menggunakan OFFSET dan FETCH. Kedua-dua kaedah mempunyai kelebihan dan kekurangan mereka sendiri, dan pembangun boleh memilih kaedah yang sesuai mengikut senario aplikasi tertentu.

Perlu diambil perhatian bahawa untuk meningkatkan kecekapan pertanyaan, indeks yang sesuai harus digunakan semasa halaman. Pada masa yang sama, jika keputusan pertanyaan melebihi 1,000, pertanyaan paging harus ditukar menjadi pertanyaan kelompok untuk mengelakkan memulangkan terlalu banyak data dalam satu pertanyaan.

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