Bonjour,
J’ai un petit souci avec l’utilisation de la fonction table QSYS2.STACK_INFO quand elle est embarqué dans un source sqlrpgle.
Apparemment, c’est compliqué de lui transmettre des variables hôtes. Quand j’essaie, j’ai un sqlcode = ‑443 et dans la log j’ai le message :
Un programme de déclenchement ou un programme externe a détecté une erreur.
Cause .… . : Un programme de déclenchement, une procédure externe ou une fonction externe a détecté et signalé une erreur à SQL. Si l’erreur s’est produite dans un programme de déclenchement, le déclencheur est dans la table QDBSSUDF2 du schéma QSYS. Si l’erreur s’est produite dans une procédure ou une fonction externe, le nom externe est QDBSSUDF2 dans le schéma QSYS. Le texte associé est JOB 529445/QUSER/QZRCSRVS NOT VALID. Si l’erreur s’est produite dans un programme de déclench
ou
Un programme de déclenchement ou un programme externe a détecté une erreur.
Cause .… . : Un programme de déclenchement, une procédure externe ou une fonction externe a détecté et signalé une erreur à SQL. Si l’erreur s’est produite dans un programme de déclenchement, le déclencheur est dans la table QDBSSUDF2 du schéma QSYS. Si l’erreur s’est produite dans une procédure ou une fonction externe, le nom externe est QDBSSUDF2 dans le schéma QSYS. Le texte associé est JOB * NOT VALID. Si l’erreur s’est produite dans un programme de déclench
Voici ci-dessous la sous-procédure concernée.
// --------------------------------------------------
// Procedure name: RetrieveFirstProgramNotRegexp
// Purpose: Generated by Extract Procedure Wizard
// Returns: Récupération dun nom du 1er programme qui ne vérifie pas l...
// e REGEXP
// Parameter: pQualifiedJobName => Le travail dont nous souhaitons récup...
// érer les informations de la pile d'appels
// Parameter: threadId => Thread id
// --------------------------------------------------
DCL-PROC RetrieveFirstProgramNotRegexp Export;
DCL-PI *N LIKE(r_NomObj);
pQualifiedJobName CHAR(28) CONST;
pNotVerifiedString Char(10) CONST;
pthreadId INT(20) CONST OPTIONS(*NOPASS);
END-PI;
// Local fields
DCL-S StackInfo LIKE(r_NomObj);
DCL-S lcallerProgram LIKE(r_NomObj);
DCL-S lcallerProgramLevel Int(10);
Dcl-s Regex varchar(100);
// Calculation specifications
Regex='(' + %Trim(pNotVerifiedString) + ')';
lcallerProgram=stk_rtvCaller();
Exec sql
SELECT ordinal_position
Into :lcallerProgramLevel
FROM TABLE (qsys2.stack_info(:pQualifiedJobName)) a
WHERE Program_name = :lcallerProgram
ORDER BY ordinal_position DESC
LIMIT 1;
Exec sql
SELECT program_name
Into :StackInfo
FROM TABLE (qsys2.stack_info(:pQualifiedJobName )) a
WHERE Not REGEXP_LIKE( program_name, :Regex,'i')
And ordinal_position < :lcallerProgramLevel
ORDER BY ordinal_position DESC
LIMIT 1;
return StackInfo;
END-PROC;
Merci d’avance.