Saya tahu Anda secara khusus bertanya bagaimana melakukan ini tanpa variabel yang dibuat pengguna - tetapi bagi orang lain yang menemukan pemikiran ini, ada baiknya memposting cara melakukannya dengan satu karena cukup sederhana:
CREATE PROCEDURE sp_recursive
BEGIN
// ... DECLAREs here
-- Set maximum recursion depth (max is 255)
SET @@SESSION.max_sp_recursion_depth = 10;
-- Increment current recursion depth
SET @recursion_depth = IFNULL(@recursion_depth + 1, 1);
-- ... More stored procedure code
-- Decrement current recursion depth. Note: Care must be taken to ensure this line
-- is *always* executed at the end of the stored procedure.
SET @recursion_depth = @recursion_depth - 1;
END
Penjelasan
@recursion_depth
variabel cakupan sesi bertambah dengan SET
di atas pernyataan setiap kali prosedur tersimpan dimasukkan. Pertama kali dimasukkan, variabel tidak diinisialisasi dan memiliki nilai NULL
- ini diperiksa oleh IFNULL()
, yang menugaskannya kembali ke satu dalam kasus ini. Di akhir prosedur tersimpan sebelum keluar, kedalaman perlu dikurangi.
Catatan lebih lanjut
Perlu dicatat bahwa SQL Server melakukannya berikan @@NESTLEVEL
variabel untuk melakukan hal di atas - tetapi sayangnya MySQL tampaknya tidak memiliki padanannya.