Sous-pro­cé­dures uti…
 
Notifications 
Reti­rer tout

Sous-pro­cé­dures uti­li­sant la fonc­tion table QSYS2.STACK_INFO ?

Posts
Uti­li­sa­teurs
Reac­tions
67  Vu
0
Début du sujet

Bon­jour, 

J’ai un petit sou­ci avec l’u­ti­li­sa­tion de la fonc­tion table QSYS2.STACK_INFO quand elle est embar­qué dans un source sqlrpgle.

Appa­rem­ment, c’est com­pli­qué de lui trans­mettre des variables hôtes. Quand j’es­saie, j’ai un sql­code = ‑443 et dans la log j’ai le message :

Un pro­gramme de déclen­che­ment ou un pro­gramme externe a détec­té une erreur.

Cause .… . : Un pro­gramme de déclen­che­ment, une pro­cé­dure externe ou une fonc­tion externe a détec­té et signa­lé une erreur à SQL. Si l’er­reur s’est pro­duite dans un pro­gramme de déclen­che­ment, le déclen­cheur est dans la table QDBSSUDF2 du sché­ma QSYS. Si l’er­reur s’est pro­duite dans une pro­cé­dure ou une fonc­tion externe, le nom externe est QDBSSUDF2 dans le sché­ma QSYS. Le texte asso­cié est JOB 529445/QUSER/QZRCSRVS NOT VALID. Si l’er­reur s’est pro­duite dans un pro­gramme de déclench

ou

Un pro­gramme de déclen­che­ment ou un pro­gramme externe a détec­té une erreur.

Cause .… . : Un pro­gramme de déclen­che­ment, une pro­cé­dure externe ou une fonc­tion externe a détec­té et signa­lé une erreur à SQL. Si l’er­reur s’est pro­duite dans un pro­gramme de déclen­che­ment, le déclen­cheur est dans la table QDBSSUDF2 du sché­ma QSYS. Si l’er­reur s’est pro­duite dans une pro­cé­dure ou une fonc­tion externe, le nom externe est QDBSSUDF2 dans le sché­ma QSYS. Le texte asso­cié est JOB * NOT VALID. Si l’er­reur s’est pro­duite dans un pro­gramme de déclench

Voi­ci ci-des­sous la sous-pro­cé­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;                              

Mer­ci d’avance.

Share :