2
votes

JMeter: Comment gérer le résultat implicite dans Oracle 12C? ORA-20999: Oracle ERROR :: ORA-29478: le résultat implicite ne peut pas être renvoyé via cette instruction

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é?


4 commentaires

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 en DEFAULT


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.


3 Réponses :


0
votes

1 commentaires

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.



0
votes

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>


2 commentaires

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.



2
votes

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!


2 commentaires

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.