Bagaimana untuk memanggil program secara rekursif apabila kebuntuan berlaku?
P粉060112396
2023-08-30 22:10:39
<p>Tugas saya "prosedur tersimpan" berjalan semalaman. Sesekali saya terjebak. Saya ingin menulis kod yang jika kebuntuan ditemui, ia akan melaksanakan proses yang sama sehingga 3 kali selepas 15 minit. </p>
<p>Andaikan sudah pukul 10 pagi. Kemudian jalankannya pada pukul 10 pagi dan jika kebuntuan ditemui, hubungi kerja itu semula pada pukul 10:15 pagi, kemudian pada pukul 10:30 pagi "jika kebuntuan", kemudian pada pukul 10:45 pagi "jika kebuntuan". Jika larian terakhir menemui jalan buntu, tamatkan kerja sepenuhnya. </p>
<p>Inilah yang saya lakukan. </p>
<pre class="brush:php;toolbar:false;">ISYTIHARKAN totalTrys INT lalai 0;
ISYTIHKAN PENGENDALI KELUAR UNTUK SQLEXCEPTION
BERMULA
DAPATKAN SYARAT DIAGNOSTIK 1
@err_num = MYSQL_ERRNO;
if(@err_num = 1213 DAN totalTrys < 4) MAKA
SET totalTrys = totalTrys + 1;
PILIH TIDUR(900);
HUBUNGI guardi.prod_update_guardi_accounts();
TAMAT JIKA;
TAMAT;</pre>
<p>Adakah ini pendekatan yang cekap? Adakah terdapat cara yang lebih baik daripada menghapuskan kebuntuan? </p>
Saya akan memastikan semuanya dalam proses: maka semua kod yang berkaitan dengan tingkah laku ini berada di satu tempat. Juga: bukankah kebuntuan akan mengikuti pelaksanaan pernyataan CALL anda dan bukannya meneruskan? Jika kita meneruskan, maka masalah itu mungkin telah diselesaikan dan kemudian kita tidak menunggu apa-apa. Selain itu, urus niaga berikutan kebuntuan hanya akan dilaksanakan selepas kebuntuan diselesaikan.
Pendekatan saya terhadap kod anda ialah:
Anda perlu menguji ini: belum diuji, jadi kesilapan menaip tidak mustahil.