Actualités : analyse de données, Business Intelligence, Data Science, Big Data
Forums, dernières contributions

Datastage : retour erreur avec fonction deffun

 ludovic laurent
Vendredi 18 Juillet 2008

Version imprimable
[Ignorer]
Bonjour,

J'ai une petite question au niveau de la focntion deffun dans un jobcontrol dans datastage. Existe il un moyen de savoir si le deffun a réussi ou non ?

En fait, je définie une fonction appelant une routine par le biais de deffun, mais je voudrais savoir si ma fonction est valide. En effet si le nom de la routine ou la routine n'est pas présente dans le projet, je constate que mon jobcontrol plante dès qu'il utilise la fonction. mais le message n'est pas du tout explicite dans la log : donc passe du temps à rechercher la cause pour se rendre compte au final que la routine n'est pas là.

exemple: routine FWKCommunLectureParam n'existe pas dans le projet

deffun LectureParam (Arg1, Arg2) Calling 'DSU.FWKCommunLectureParam'
...
...
ArborescenceParam=LectureParam('ArborescenceParam351',ChemParam)



et là job plante avec uniquement le message suivant :
Warning Attempting to Cleanup after ABORT raised in stage Batch::BSRTP_AlimBSRTP1..JobControl
Control Job Batch::BSRTP_AlimBSRTP1 aborted.

merci pour votre aide sur ce sujet
 ludovic laurent
Mardi 29 Juillet 2008

Version imprimable
[Ignorer]
J'ai finalement trouvé une solution qui fonctionne en exploitant une requete SQL sur le VOC de datastage

SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunLectureParam';


en passant dans le where le nom de la routine

Ainsi dans le jobcontrol avec la commande suivante, il est possible de récupérer le résultat (0 si pas présente; 1 si présente)

call DSExecute ('TCL', 'SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunRunOrJumpSavePointV2' ; ' , Output, ReturnCode)


Mais le résultat dans output a la valeur suivante :
COUNT ( * )

0

1 records listed.


c'est pourquoi il faut retravailler le resulat pour n'avoir que la valeur 0 ou 1, avec le code suivant :

OutputExploitable=Trim( (Ereplace ( Ereplace(Output, 'COUNT ( * )' ,' '), '1 records listed.' , ' ')))[3,2]

et ainsi OutputExploitable est égal à 0




Donc au final pour détecter la présence d'une routine dans mon job control, j'ai les lignes de codes suivantes



deffun RunOrJumpSavePointV2(Arg1,Arg2) calling 'DSU.FWKCommunRunOrJumpSavePointV2'

call DSExecute ('TCL', 'SELECT COUNT(*) FROM VOC WHERE F0 = 'DSU.FWKCommunRunOrJumpSavePointV2' ; ' , Output, ReturnCode)

OutputExploitable=Trim( (Ereplace ( Ereplace(Output, 'COUNT ( * )' ,' '), '1 records listed.' , ' ')))[3,2]

if OutputExploitable = 0
then
Call DSLogFatal('la routine FWKCommunRunOrJumpSavePointV2 n est pas presente dans le projet','')
Goto EndProcess
end




où EndProcess est une étiquette placé à la fin du code de mon jobcontrol afin de sortir du programme


Twitter
Rss
LinkedIn
Facebook
Apple Podcast
App Store
Google Play Store