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