Maison  >  Questions et réponses  >  le corps du texte

Exécuter des procédures stockées contenant des scripts SQL à l'aide de Robot Framework

<p>Je souhaite exécuter un script SQL contenant la création de bases de données et de tables ainsi que la création de procédures stockées. Mais lorsque j'essaie d'exécuter le script SQL dans la bibliothèque de base de données <strong></strong> à l'aide du mot clé <strong>execute sql script</strong>, j'obtiens l'erreur suivante : </p> <pre class="brush:php;toolbar:false;">ProgrammingError : (1064, "Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour connaître la bonne syntaxe à utiliser à proximité 'DELIMITER $$n CRÉER OU REMPLACER LA PROCÉDURE `proc_GetCustomerDetails`(n I...' à la ligne 2")</pre> <p>Avant la procédure stockée, j'ai ce <strong>délimiteur</strong> : </p> <pre class="brush:php;toolbar:false;">DELIMITER $$ CRÉER OU REMPLACER LA PROCÉDURE `proc_GetCustomerDetails`( DANS ClientNbr LONGTEXT, EN LANG VARCHAR(5) ) DÉTERMINISTE COMMENCER SI Lang EST NULL ALORS SET lang = "fin"; FIN SI; SELECT * à partir de nombd.customer ; FIN;$$ DÉLIMITEUR ;</pre> <p>Si je commente la partie de la procédure stockée, le fichier SQL s'exécutera sans erreur avec le reste des instructions de création de table. </p> <p>J'ai effectué une recherche sur Google et je n'ai trouvé aucune question connexe. Je vois que nous avons des mots-clés qui appellent des procédures stockées. Mais je veux mettre la création de table et la procédure stockée dans le même fichier SQL et l'exécuter. J'utilise MariaDB pour cette tâche. </p> <p><strong>Bibliothèques utilisées</strong> : </p> <ul> <li>pymysql</li> <li>Bibliothèque de base de données Robot Framework</li> </ul> <p>Si j'exécute le fichier SQL à l'aide de HeidiSQL, il s'exécute dans la procédure stockée et le délimiteur sans aucune erreur. Cela signifie qu'il n'y a aucune erreur SQL. </p> <p><strong>Quelqu'un peut-il me dire comment résoudre ce problème ? </strong></p>
P粉031492081P粉031492081439 Il y a quelques jours487

répondre à tous(1)je répondrai

  • P粉268284930

    P粉2682849302023-08-29 11:03:12

    DELIMITER est une instruction client uniquement, le serveur ne la prend pas en charge, d'où l'erreur. Solution - supprimez-le.

    Voici une question avec une très bonne réponse qui explique ce qu'est DELIMITER et pourquoi il est nécessaire.

    En bref - lorsque vous travaillez avec le client, vous avez besoin d'un moyen de lui indiquer "ce n'est pas une instruction qui sera exécutée immédiatement, c'est juste une ligne dans la procédure stockée que vous enverrez au serveur" - donc vous dites (Client) "DELIMITER entre les instructions est temporairement $$". Le serveur n'a pas besoin de cela - il sait que tout entre CREATE PROCEDURE, BEGIN, END est une déclaration connectée, un bloc.

    Lorsque vous vous connectez à la base de données via API (pymysql), par rapport aux clients interactifs (shell, heidisql, etc.) - vous envoyez le SP sous forme de morceau et il n'y a aucun moyen d'exécuter ses instructions une par une, donc DELIMITER ne l'est pas nécessaire, le serveur ne prend pas en charge cette commande et générera une erreur. Supprime-le.

    répondre
    0
  • Annulerrépondre