Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyelesaikan Ralat 'Had Kedalaman Rekursi Melebihi' dalam Pertanyaan SQL Rekursif?
Menyelesaikan Ralat "Had Kedalaman Rekursi Melebihi" dalam Pertanyaan Rekursif
Artikel ini menangani ralat pertanyaan SQL biasa: melebihi kedalaman rekursi maksimum. Masalahnya berpunca daripada Ungkapan Jadual Biasa (CTE) rekursif, khususnya memberi kesan kepada EmployeeTree
CTE dalam pertanyaan contoh.
EmployeeTree
CTE secara rekursif mendapatkan semula data pekerja daripada jadual tEmployees
, membina struktur hierarki berdasarkan nilai padanan dalam lajur APV_MGR_EMP_ID
dan UPS_ACP_EMP_NR
. Walau bagaimanapun, hierarki yang sangat mendalam boleh mencetuskan had rekursi (selalunya ditetapkan kepada 100), mengakibatkan ralat.
Penyelesaian: Mendayakan Rekursi Tanpa Had
Penyelesaian terletak pada melaraskan pilihan maxrecursion
pertanyaan. Pilihan ini mengawal kedalaman rekursi maksimum. Menetapkannya kepada 0 membolehkan pengulangan tanpa had, dengan berkesan memintas ralat:
<code class="language-sql">... from EmployeeTree option (maxrecursion 0)</code>
Dengan menambahkan option (maxrecursion 0)
, CTE rekursif akan meneruskan pemprosesan sehingga semua baris yang sepadan diambil, sekali gus menghalang ralat "melebihi had kedalaman rekursi". Pendekatan ini sesuai apabila anda yakin rekursi akhirnya akan ditamatkan secara semula jadi disebabkan oleh struktur data. Walau bagaimanapun, berhati-hati dinasihatkan; rekursi tanpa had dalam pertanyaan yang direka bentuk dengan buruk boleh membawa kepada isu prestasi atau bahkan ketidakstabilan sistem. Uji dengan teliti sebarang perubahan yang melibatkan pengulangan tak terhingga.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Ralat 'Had Kedalaman Rekursi Melebihi' dalam Pertanyaan SQL Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!