web-dev-qa-db-fra.com

Comment définir l'indicateur CLIENT_MULTI_STATEMENTS pour appeler plusieurs procédures stockées dans une seule procédure stockée?

Comment définir le drapeau CLIENT_MULTI_STATEMENTS pour appeler plusieurs procédures stockées dans une seule procédure stockée?

J'ai 30 procédures stockées que je voudrais exécuter avec un clic de bouton pour traiter les données utilisateur. Il semble que la création d'une seule procédure pour exécuter les 30 autres serait plus facile, mais cela déclenche une erreur de syntaxe.
L'exécution d'une procédure stockée dans une procédure stockée fonctionne très bien, même en créer une supplémentaire crée une erreur.
Ma recherche a indiqué en réglant la CLIENT_MULTI_STATEMENTS flag Je peux exécuter plusieurs procédures, mais il existe peu de documentation sur la procédure à suivre dans un CMS tel que Joomla.

Je travaille avec Joomla 3/mysql 5.7/mariadb.
Dois-je modifier le code du noyau? Ou existe-t-il un moyen de définir l'indicateur en externe?

Les procédures sont appelées dans l’ordre indiqué ci-dessous, la première procédure s’exécutant toujours sans problème. J'ai vérifié la documentation de mariadb et de mysql et essayé chaque itération de la syntaxe appropriée à laquelle je pouvais penser, c'est pourquoi je pense que c'est un problème de drapeau.
Par défaut, mysql n'autorise pas l'exécution de plusieurs instructions dans cette version, si je comprends bien. C’est la raison pour laquelle je voudrais comprendre comment définir les indicateurs comme indiqué dans la documentation.

CALL joomla3.Answers_to_Translated_RTN1();
CALL joomla3.Answers_to_Translated_RTN2();
CALL joomla3.UC_to_Results_RTN3();

...

MySQL a dit: # 1064 - Vous avez une erreur dans votre syntaxe SQL; vérifiez dans le manuel correspondant à la version de votre serveur MariaDB la syntaxe à utiliser près de 'CALL joomla3.Answers_to_Translated_RTN2 (); CALL joomla3.UC_to_Results_RTN3 (); 'à la ligne 2

1
BabyCode123

Je n'ai pas pu comprendre comment activer CLIENT_MULTI_STATEMENTS dans Joomla. J'ai pu résoudre mon problème en utilisant ce morceau de code pour diviser mes requêtes en un tableau de requêtes que le serveur permettra de traiter.

JDatabaseDriver::splitSql($query);

$query =  "CALL ...;Call...;...;";

$queries = $db->splitSql($query);
foreach( $queries AS $sql ) {

$db->setQuery($sql) ->execute();
$db->query();
}

À votre santé

2
BabyCode123