Lors de l'appel d'une procédure stockée via JMeter dans une base de données Oracle, j'obtiens l'erreur suivante:
ORA-20999: ERREUR Oracle :: ORA-29478: Le résultat implicite ne peut pas être renvoyé via cette instruction
Je n'ai pas de réputation, je ne peux donc pas publier d'images. Je vais décrire la configuration.
Voici mes informations de connexion JDBC:
ORA-20999: Oracle ERROR:: ORA-29478: Implicit result cannot be returned through this statement ORA-06512: at 'XXXX.UTILS", line 2019 ORA-06512: at "XXXX.OFFICE_HIERARCHY", line 39
Ceci est mon JDBC Demander des informations sur l'échantillonneur:
Query Type: Callable Statement Procedure: call office_hierarchy()
Voici l'erreur que j'obtiens:
Max Number of Connections:0 Max Wait (ms):10000 Time Between Eviction Runs (ms): 60000 Auto Commit: True Transaction Isolation:TRANSACTION_READ_COMMITTED Test While Idle: True Soft Min Evictable Idle Time (ms): 5000 Validation Query: select 1 from dual JDBC Driver Class: oracle.jdbc.OracleDriver
J'ai volontairement remplacé mon utilisateur par XXXX.
Je mets en place un script de test JMeter, dans lequel j'appelle des procédures stockées dans notre base de données Oracle. La base de données Oracle est sur la version 12C. J'utilise la dernière version ojdbc8.jar du site Oracle. J'ai également essayé ojdbc6.jar et ojdbc7.jar, également sur le site Web d'Oracle. Mon Jmeter est sur 5.0 r1840935. Ma version java est 1.8.0_191.
J'ai confirmé que la connexion à la base de données peut être établie, car une requête de sélection peut être effectuée sans problème.
Des résultats implicites (ou curseurs implicites) ont été introduits dans Oracle 12c. Quelqu'un a-t-il rencontré ce problème jusqu'à présent? Dois-je changer quelque chose dans la manière dont j'appelle la procédure stockée? Ou est-ce encore peut-être un problème de pilote? Ou est-ce que JMeter ne prend pas encore en charge cette fonctionnalité?
3 Réponses :
Assurez-vous d'utiliser Callable Statement
comme type de requête dans Sampler Requête JDBC
Vous devrez également modifier "Requête de validation" pour sélectionner 1 de dual
dans la configuration de connexion JDBC
Salut Dmitri, merci pour vos suggestions. J'ai essayé vos étapes mais cela n'a pas résolu mon problème. J'ai mis à jour ma question initiale en conséquence.
Il semble que vous utilisez toujours la version 11g du pilote ojdbc.
Vérifiez la valeur de la propriété user.classpath
dans JMETER_HOME / bin / user.properties
pour vous assurer que vous utilisez correctement la version ojdbc7.jar pour Oracle 12c dans JMETER_HOME / lib < / code>
Salut Vadim, merci pour votre réponse. J'ai suivi ces étapes lors de la vérification de mes pilotes. J'ai essayé cela avec ojdbc6.jar, ojdbc7.jar et le nouveau ojdbc8.jar. Après quelques analyses, j'ai trouvé que ma syntaxe est incorrecte. J'ai ajouté une réponse sur cette page qui explique en détail l'erreur de syntaxe.
@JohanK super! mais acceptez votre réponse pour aider les autres à la trouver.
Après quelques recherches, j'ai trouvé qu'il ne s'agissait pas d'un problème de pilote. C'était en fait autre chose. J'utilisais la mauvaise syntaxe pour appeler la procédure stockée.
Ma syntaxe d'origine était donc:
BEGIN _stored_procedure_(); END; BEGIN office_hierarchy(); END;
Cependant, la syntaxe correcte La syntaxe est la suivante:
call _stored_procedure_() call office_hierarchy()
Cela résoudra ce problème, JMeter renvoie les ensembles de résultats sans aucun problème maintenant.
Merci à tous pour votre aide. J'accepterai ma réponse de propriétaire après 48 heures selon les règles du site. Toute autre contribution est bien sûr toujours la bienvenue!
Vous devez accepter votre réponse pour que les autres puissent lui faire confiance. Merci pour votre contribution.
Merci pour la suggestion. J'ai essayé d'accepter ma réponse, mais une validation apparaît que je ne peux accepter ma réponse que demain. J'ai trouvé dans la section d'aide que vous ne pouvez accepter votre propre réponse qu'après 48 heures.
affichez votre requête JDBC, essayez également d'utiliser le type de requête
Callable Statement
Salut user7294900, merci pour votre suggestion. J'ai mis à jour ma question initiale avec des informations supplémentaires, j'espère que ma question est maintenant plus claire. Je ne peux malheureusement pas inclure d'images car je n'ai pas encore de réputation.
Essayez de changer dans la configuration
Isolation de transaction
enDEFAULT
Merci user7294900 pour votre contribution. J'ai essayé de modifier l'isolement des transactions, mais à la fin, il s'est avéré que l'erreur était liée à ma syntaxe. J'ai posté une réponse ci-dessous où j'explique cela plus en détail.