Rumah > pangkalan data > tutorial mysql > ROWNUM dalam Oracle: Bagaimana untuk Mencapai Penomboran yang Betul dan Mengelakkan Perangkap Biasa?

ROWNUM dalam Oracle: Bagaimana untuk Mencapai Penomboran yang Betul dan Mengelakkan Perangkap Biasa?

Patricia Arquette
Lepaskan: 2025-01-19 06:18:10
asal
527 orang telah melayarinya

ROWNUM in Oracle: How to Achieve Proper Pagination and Avoid Common Pitfalls?

Oracle ROWNUM dan Penomboran: Isu dan Penyelesaian Biasa

Artikel ini menangani cabaran yang kerap dihadapi apabila menggunakan ROWNUM untuk penomboran dalam Oracle SQL.

Masalah 1: Tidak Berkesan WHERE Klausa dengan ROWNUM

Mengapa SELECT * FROM Person WHERE rownum > 100 tidak mengembalikan hasil?

ROWNUM diberikan selepas fasa penapisan (predikat) awal. Oleh kerana nilai ROWNUM hanya dinaikkan selepas tugasan, nilai yang lebih besar daripada 1 tidak boleh dipilih secara langsung menggunakan klausa WHERE dengan cara ini. Tiada baris memenuhi syarat ROWNUM > 100.

Masalah 2: ROWNUM BETWEEN Had

Mengapa WHERE rownum BETWEEN lowerBound AND upperBound tidak sesuai untuk penomboran?

Sintaks ini juga tidak berkesan kerana tugasan ROWNUM mendahului penilaian klausa WHERE. Oracle tidak boleh terus memilih julat ROWNUM nilai.

Penyelesaian: Oracle 12c and Beyond (Penghadan Baris Atas-n)

Oracle 12c memperkenalkan pendekatan unggul: "Penghadan Baris Atas-n" menggunakan OFFSET dan FETCH. Contohnya:

<code class="language-sql">SELECT empno, sal
FROM   emp
ORDER BY sal
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;</code>
Salin selepas log masuk

Ini dengan cekap mendapatkan semula baris 5-8 (offset 4, ambil 4). Kaedah ini lebih diutamakan daripada teknik bergantung semata-mata pada ROWNUM.

Masalah 3: Menyembunyikan ROWNUM Lajur

Bagaimanakah kita boleh menghalang lajur ROWNUM daripada muncul dalam set hasil?

Cuma senaraikan hanya lajur yang diingini dalam pernyataan SELECT luar. Sebagai alternatif, dalam SQL*Plus, anda boleh menggunakan perintah NOPRINT untuk menyekat output lajur tertentu.

Masalah 4: Memastikan Penomboran Betul dengan ROWNUM (Versi Oracle Lama)

Bolehkah ROWNUM mencapai penomboran yang betul?

Ya, tetapi ia memerlukan struktur pertanyaan bersarang:

<code class="language-sql">SELECT val
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   t
                ORDER BY val)
        WHERE rownum <= 8)
WHERE  rnum >= 5;</code>
Salin selepas log masuk

Ini mendapatkan semula baris 5-8 dengan betul. Pertanyaan dalam memberikan ROWNUM, penapis pertanyaan tengah berdasarkan sempadan atas dan penapis pertanyaan luar berdasarkan sempadan bawah. Walau bagaimanapun, kaedah OFFSET/FETCH kekal sebagai pilihan yang lebih cekap dan boleh dibaca dalam Oracle 12c dan lebih baru.

Atas ialah kandungan terperinci ROWNUM dalam Oracle: Bagaimana untuk Mencapai Penomboran yang Betul dan Mengelakkan Perangkap Biasa?. 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