Welcome Guest! Log in
×

Notice

The forum is in read only mode.
Stambia versions 2.x, 3.x, S17, S18, S19 and S20 are reaching End of Support January, 15th, 2024. Please consider upgrading to the supported Semarchy xDI versions. See Global Policy Support and the Semarchy Documentation.

The Stambia User Community is moving to Semarchy! All the applicable resources have already been moved or are currently being moved to their new location. Read more…

Topic-icon Question Comment récupérer les messages d'erreur Oracle

More
25 Aug 2016 13:27 #1 by vercells
Bonjour,

Je cherche une solution qui me permettrait de récupérer les messages d'erreur Oracle.
Idéalement j'aurais besoin de récupérer le code "ORA-" et le texte associé au message d'erreur.
J'essaye de récupérer la valeur du CORE_STACK_TRACE mais sans succès (ErrorHandler
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: le littéral de la chaîne n'a pas de limite (<Unknown source>#2) in <Unknown source> at line number 2)


Je joins une capture d'écran illustrant la problématique.

Merci et bonne journée,

Attachments:
More
25 Aug 2016 14:20 #2 by Nicolas Verscheure
Replied by Nicolas Verscheure on topic Comment récupérer les messages d'erreur Oracle
Il faudrait fournir le code de l'action ErrorHandler.
Il y a sûrement une erreur dans le scripting.
More
25 Aug 2016 14:47 #3 by vercells
Hello,

Le problème est justement que je ne sais pas quelle est la bonne méthode permettant de "trapper" l'erreur.
J'ai essayé avec le code suivant mais cela ne marche pas

// Publish to variables on the root process
__ctx__.publishVariable("../test","${../ExecuteDelivery/TXPROCESS}$");
__ctx__.publishVariable("../test2","${../ExecuteDelivery/CORE_STACK_TRACE}$");

Dans mon exemple, ce que je souhaiterais serait de récupérer:

com.indy.engine.common.exceptions.EngineExceptionI: Session error : ac10230d0156c18e062e578b3f1c7e4a
java.sql.SQLException: ORA-06550: Ligne 8, colonne 24 :
PL/SQL: ORA-00913: trop de valeurs
ORA-06550: Ligne 8, colonne 3 :
PL/SQL: SQL Statement ignored

Et idéalement ; ORA-00913: trop de valeurs
More
25 Aug 2016 14:54 #4 by Thomas BLETON
Replied by Thomas BLETON on topic Comment récupérer les messages d'erreur Oracle
Hello,

La syntaxe ${../ExecuteDelivery/CORE_STACK_TRACE}$ fera une substitution de la valeur, or celle-ci contient de sauts de ligne, ce qui a tendance à poser problème aux moteurs Javascript comme rhino.

Essaye plutôt d'utiliser un getVariableValue, comme ceci :
__ctx__.publishVariable("../test2", __ctx__.getVariableValue("../ExecuteDelivery/CORE_STACK_TRACE"));

=> est-ce que ça passe mieux ?
More
26 Aug 2016 10:22 #5 by vercells
Salut,

Oui ça passe mieux avec cette syntaxe :)
Par contre, on récupère toute la stack et c'est difficlement exploitable. Est ce que tu sais si il y a une solution qui permettrait de récupérer l'erreur Oracle (dans l'exemple ORA-0913) ?
Idéalement ce que j'aimerais faire c'est en fonction de l'erreur reschédulé ou pas le traitement en erreur. Mais pour cela il faudrait que j'arrive à isoler ce code erreur.

Merci
More
26 Aug 2016 11:21 #6 by Thomas BLETON
Replied by Thomas BLETON on topic Comment récupérer les messages d'erreur Oracle
J'aurais bien dit une regex, mais visiblement la stack peut contenir plusieurs codes ORA-xxxxx.
Voici un exemple qui renvoie la première occurence de ORA-xxxxx :
var pattern = /ORA-[0-9]+/;
var msg = __ctx__.getVariableValue("../ExecuteDelivery/CORE_RET_MESS");
var result = pattern.exec(msg);
__ctx__.publishVariable("../test3", result[0]);
More
29 Aug 2016 15:52 #7 by vercells
Selon ton retour j'ai mis en place le code suivant:

var pattern = /ORA-12805+/;
var msg = __ctx__.getVariableValue("../ExecuteDelivery/CORE_STACK_TRACE");
var result = pattern.exec(msg);
__ctx__.publishVariable("../test1","${../ExecuteDelivery/TXPROCESS}$");
__ctx__.publishVariable("../test2", __ctx__.getVariableValue("../ExecuteDelivery/CORE_STACK_TRACE"));
if (result !== null) {__ctx__.publishVariable("../test3", result[0]); } else {__ctx__.publishVariable("../test3", ""); }

Lorsque test3 n'est pas null alors je sais que je dois replanifier l'exécution du job correspondant.

Par contre si test2 contient des single quotes (ex: ORA-12545: Connexion impossible car l'hôte ou l'objet cible n'existe pas) je n'arrive pas à insérer l'erreur dans une table de log.
Comment remplacer les single quotes dans la variable test2 ?

Merci
More
29 Aug 2016 15:54 #8 by Thomas BLETON
Replied by Thomas BLETON on topic Comment récupérer les messages d'erreur Oracle
Peut-être avec la fonction javascript replace() ?