Hallo, hiermit poste ich nun noch mein Lösung, der code funktioniert nun so.

Im weiteren hatte ich noch das Problem mit der Fehlermeldung "Anzeigervariable erforderlich SQLSTATE 22002"

Man beachte die Lösung für diese Fehlermeldung,
die Variable "myind", die die NULL STATI Für die Felder zurückgibt
(Die sonst als ersten Datensatz angefügt werden - wie clever gelöst, IBM! [ha-ha])

Ich hoffe das der Code jedem Hilft, der später nach der Lösung für solcherlei Probleme Googelt.

Ein speziellen Dank nochmal an Fuerchau, der so nett war und mir geholfen hat .

Code:
  
**free
ctl-opt option(*nodebugio:*srcstmt:*nounref)  alwnull(*inputonly)  main(main);

dcl-proc main;
  dcl-ds sysUserTable QUALIFIED;
    USER_NAME char(10);
    INITPGM char(10);
    INITPGMLIB char(10);
  END-DS;
  dcl-s myind int(5) dim(256);

  dcl-s InsertErrSQLtext char(999);
  dcl-s insertState char(6);
  dcl-s testStr char(52);
  dcl-s statSQL int(10);
  dcl-s CNT int(10);


  exec sql DECLARE CUILoop SCROLL CURSOR FOR
        SELECT
        USER_NAME,
        INITPGM ,
        INITPGMLIB
        FROM QSYS2.USER_INFO A
      ;
  exec sql OPEN CUILoop;

  exec sql FETCH FIRST FROM CUILoop INTO :sysUserTable  :myind;

  // SQL DEBUG START
  // Falls hier kommt: Anzeigervariable erforderlich 22002 .. dann brauche ich hinter dem sql
  // noch eine weitere Variable, so
  // dcl-s myind int(5) dim(256);
  // exec sql FETCH FROM CUILoop INTO :sysUserTable :myind;
  Exec SQL GET DIAGNOSTICS Condition 1 :InsertErrSQLtext = MESSAGE_TEXT;
  Exec SQL Get Diagnostics Condition 1 :insertState = RETURNED_SQLSTATE;
  Monitor;
    statSQL = %dec(SQLSTATE:7:2);   // Vorsicht! es können codes mit buchstaben vorkommen.
  On-Error  *all ;
  Endmon;
  testStr = %SUBST(InsertErrSQLtext:1:52);
  dsply testStr;
  testStr = %SUBST(InsertErrSQLtext:53:105);
  dsply testStr;
  testStr = %trim('SQLSTATE: '+insertState);
  dsply testStr;
  // SQL DEBUG END

  dow (statSQL < 2000) or (CNT > 3);
    dsply %trim(sysUserTable.USER_NAME+'-'+sysUserTable.INITPGM+'/'+sysUserTable.INITPGMLIB);
    exec sql FETCH NEXT FROM CUILoop INTO :sysUserTable  :myind;
    Monitor;
      statSQL = %dec(SQLSTATE:7:2);   // Vorsicht! es können codes mit buchstaben vorkommen.
    On-Error  *all ;
    Endmon;
    dsply %trim('SQLSTATE '+SQLSTATE);
    CNT += 1;
  enddo;
  exec sql close CUILoop;
end-proc;
Hinweis zur Lösung:
In der Lösung hier benutze ich keinen Join mehr, es ist eine einfache User_Name Abfrage, allerdings funktioniert auch die join Abfrage aus der ursprünglichen anfrage s.o.)