Comment appeler un programme de manière récursive en cas de blocage ?
P粉060112396
P粉060112396 2023-08-30 22:10:39
0
1
498
<p>La "procédure stockée" de mon travail s'exécute pendant la nuit. De temps en temps, je reste coincé. Je veux écrire un code qui, si un blocage est trouvé, exécutera le même processus jusqu'à 3 fois après 15 minutes. </p> <p>Supposons qu’il soit 10 heures du matin. Exécutez-le ensuite à 10h et si un blocage est trouvé, rappelez le travail à 10h15, puis à 10h30 "si blocage", puis à 10h45 "si blocage". Si la dernière exécution se bloque, terminez complètement le travail. </p> <p>C'est ce que j'ai fait. </p> <pre class="brush:php;toolbar:false;">DÉCLARE totalTrys INT DEFAULT 0; DÉCLARER LE MANIPULATEUR DE SORTIE POUR SQLEXCEPTION COMMENCER OBTENIR LE DIAGNOSTIC CONDITION 1 @err_num = MYSQL_ERRNO ; if (@err_num = 1213 ET totalTrys < 4) ALORS SET totalTrys = totalTrys + 1 ; SÉLECTIONNEZ LE SOMMEIL (900); APPEL guardi.prod_update_guardi_accounts(); FIN SI; FIN;≪/pré> <p>Est-ce une approche efficace ? Existe-t-il un meilleur moyen que d’éliminer l’impasse ? </p>
P粉060112396
P粉060112396

répondre à tous(1)
P粉649990163

Je garderais tout en cours : alors tout le code lié à ce comportement est au même endroit. Aussi : le blocage ne suivrait-il pas l'exécution de votre instruction CALL au lieu de continuer ? Si nous continuons, le problème aura peut-être été résolu et nous n'attendrons plus rien. De plus, les transactions suivant un blocage ne seront exécutées qu’une fois le blocage résolu.

Mon approche de votre code est la suivante :

CREATE PROCEDURE manageAccounts()
BEGIN
DECLARE totalTrys INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
GET DIAGNOSTICS CONDITION 1
@err_num = MYSQL_ERRNO;
CALL guardi.prod_update_guardi_accounts();
WHILE(@err_num = 1213 AND totalTrys < 4) DO
    SET totalTrys = totalTrys + 1;
    SELECT SLEEP(900);
    CALL guardi.prod_update_guardi_accounts();
END WHILE;
END;

Vous devrez tester ceci : non testé, donc les fautes de frappe ne sont pas impossibles.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!