9
votes

La procédure stockée MySQL échoue lorsqu'elle a appelé de r

Cette procédure fonctionne de la ligne de commande MySQL à distance à distance et sur localhost et fonctionne lorsque vous appuyez sur PHP. Dans tous les cas, les subventions sont adéquates: xxx

J'essaie de l'appeler de r: xxx

La requête nue fonctionne bien. L'appel de procédure échoue avec

AVERTISSEMENT DE RABACH / ERREUR !!! Erreur dans mysqexecstatement (Conn, déclaration, ...): pilote RS-DBI: (ne pouvait pas Déclaration de course: procédure mydb.lee_expout ne peut pas retourner un Résultat défini dans le contexte donné)

the MySQL Docs dis

pour les déclarations qui peuvent être déterminées seulement au moment de l'exécution pour retourner un résultat définir, une procédure% s ne peut pas retourner un Résultat défini dans l'erreur contextuelle donnée se produit.

On pourrait penser que si une procédure allait jeter cette erreur, elle serait lancée dans toutes les circonstances au lieu de partir juste de r.

Toute réflexion sur la manière de résoudre ce problème? < / p>


3 commentaires

Avez-vous réussi à courir votre propos proc? Pouvez-vous marquer la réponse correcte qui vous aide? Ou si aucun d'entre eux, vous ne rendez POST PROPRE et vous y répondez. Les personnes intéressées peuvent donc trouver une solution ici. Merci


@Jangorecki: Je n'ai pas réussi à exécuter la procédure stockée. Je devais utiliser la requête nue. C'était il y a un moment et peut-être que le paquet DBI de R est peut-être meilleur sur les procédures stockées maintenant.


Je n'utilise pas MySQL, mais j'ai exécuté des requêtes SQL sur les bases de données Microsoft SQL à l'aide de R. J'ai remarqué que chaque fois que, dans la requête, il y a quelque chose que la déclaration de sélection nomée, le processus échoue. Je ne sais pas si cela est nécessaire dans MySQL, mais avez-vous essayé de supprimer la "procédure de création", "commencer" et "fin" des lignes?


3 Réponses :


1
votes

Ne pas maintenant à propos de R, mais ce

p <- paste('CALL lee_expout(', exp_id, ',', group_id,')', sep= ' ') 


2 commentaires

Ouais, je sais que c'est moche. Mais je n'ai pas trouvé de meilleure façon dans R; Croyez-moi, je cherchais des espaces réservés! En tout état de cause, j'ai echai les cordes et ils sont corrects. Et la requête nue est créée via la même méthode colle . Donc, je ne pense pas que ce soit un problème de chaîne. Vous avez raison que c'est un bon endroit pour commencer à déboguer cependant.


C'est une concaténation à la chaîne, mais utilisée plus souvent dans R. Vous n'avez pas à ajouter le SEP = '' à la manière, l'espace est le séparateur par défaut.



3
votes

Autant que je sache, appeler les procédures SQL de R (dBCallProc) n'est pas encore formellement mise en œuvre (voir Manuel de référence du 24 juillet 2010: http://cran.r-project.org/web/packages/rmysql/rmysql.pdf )

RMYSQL est transféré du style de programmation S3 à S4 et est toujours en cours de développement (version 0.7 étant le courant actuel). Je vous suggère de poser la même question sur la liste de diffusion de la base de données pour R:

https://stat.thz.ch/mailman/listinfo/r -SIG-DB

Si cela est possible, ils vous montreront comment. Si ce n'est pas le cas, ils vous diront pourquoi.


1 commentaires

J'ai vu que dBCallProc n'était pas encore mis en œuvre. C'est pourquoi j'ai essayé une requête droite, à comprendre que ce qui fonctionne dans d'autres langues pourrait également fonctionner en r. Merci pour le lien avec la liste de diffusion. Je vais certainement essayer là-bas et faire rapport.



3
votes

Essayez d'ajouter:

client.flag = client_multi_statifs

à vos paramètres de connexion. Cela peut aider.

Il y a quelques détails à ce sujet dans le PDF RMYSQL.


0 commentaires