Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mendapatkan kedalaman dalam rekursi prosedur toko mysql?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mengerjakan ulang kata sandi MySQL saya sehingga saya bisa menyapu db:create on Rails?

  2. Memperbarui array serial di mysql (tanpa unserialising?)

  3. MySQL - paksa untuk tidak menggunakan cache untuk menguji kecepatan kueri

  4. Terjadi masalah saat menjalankan pernyataan hapus MySQL di Java

  5. String karakter UTF-8 tidak valid saat mengimpor file CSV ke database MySQL