[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2017
    Beiträge
    25

    SQL Fetch in Indicator DS nicht möglich

    Hallo Zusammen,

    ich möchte gerne folgenden SQL durchführen.
    Leider wird das Ganze nicht kompiliert, da 'userInfoInd' nicht gefunden wird.


    dcl-s userProfile char(10) inz('ABC');

    dcl-ds userInfo Extname('USER_INFO') qualified alias inz;
    end-ds;


    dcl-ds userInfoInd Extname('USER_INFO': *null) qualified alias inz;
    end-ds;



    // Benutzer Informationen ermitteln.
    exec sql
    select User_Info.* into :userInfo :userInfoInd
    from qsys2.User_info
    where authorization_name = trim(:userProfile);

    Hab schon einige Sache versucht mit LIKEREC usw., aber alles ohne Erfolg.
    Laut Referenz kann eine DS mit *null definiert nicht für I/O Operationen genutzt werden.
    Aber wofür gibt es dann diese Definition. Möchte nicht einfach ein Array mit X Dimensionen haben, sondern den Null Indikator mit dem entsprechenden Feldnamen ansprechen.

    Gruß
    DerMuller

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Leider lässt sich dies tatsächlich nicht per externer DS definieren.
    Für den NULL-Indikator gibt es nur die Funktion %NULLIND(Feldname). Da der Feldname nicht in einer Variablen stehen kann, ist das also zur Compilezeit aufzulösen.

    %NULLIND (Query or Set Null Indicator)
    %NULLIND(fieldname)
    The %NULLIND built-in function can be used to query or set the null indicator for null-capable fields.
    This built-in function can only be used if the ALWNULL(*USRCTL) keyword is specified on a control
    specification or as a command parameter. The fieldname can be a null-capable array element, data
    structure, stand-alone field, subfield, or multiple occurrence data structure.
    %NULLIND can only be used in expressions in extended factor 2.
    When used on the right-hand side of an expression, this function returns the setting of the null indicator
    for the null-capable field. The setting can be *ON or *OFF.
    When used on the left-hand side of an expression, this function can be used to set the null indicator for
    null-capable fields to *ON or *OFF. The content of a null-capable field remains unchanged.

    Daher ist ein NULL-Indicator nicht in einer DS definierbar.

    Anders ist es mit SQL.
    Passend zu einer DS kann man per DIM(n) ein Array von INT(5)-Feldern passend zur Anzahl der DS-felder definieren (mehr ist unschädlich).
    Somit geht dann "fetch MyCursor into : MyDS : MyIndArray". Leider ist dann hier abzählen gefragt (Index = Position des Feldes in der DS, beginnend bei 1).

    OK, du nimmst ja bereits SQL.
    Dann ergänze die DS mit einem "NullInd int(5) dim(n) pos(1)" und gib das Array an.
    Das Problem dabei ist, dass SQL nicht abfragt ob ein Feld NULL kann. Für jedes Feld der DS brauchst du den Null-Indicator (*null definiert dir zu wenig Felder).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2017
    Beiträge
    25
    Hallo Fuerchau,

    danke für die Anwort und die Erklärung.

    Gerade das von dir angesprochene "abzählen" wollte ich mir damit ersparen, aber wenn es nicht anders geht, dann ist das eben so. Trotzdem danke!

    Gruß
    derMuller

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Im Gegensatz zu %NULLIND hat der NULL-Indicator noch eine Zusatzfunktion.
    Deshalb können Nicht-NULL-Felder trotzdem einen NULL-Indicator befüllen:

    0 = alles OK
    -1 = NULL
    > 0 = Warnung, z.B. Daten abgeschnitten

    Wenn du dir das abzählen ersparen willst, hilft nur eine entsprechende Definition:
    dcl-ds NullDS;
    F1Null int(5);
    F2Null int(5);
    :
    nulls int(5) dim(n) pos(1);
    endds;

    Allerdings muss man da halt bei jeder Änderung die NullDefs anpassen.
    So schön das mit dem "Select * " auch ist, das Aufzählen im Select ist da langfristig gesehen sicherer (der Compiler macht das ja auch).
    Änderungen betreffen das Programm gar nicht, auch nicht bei Recompile. Erst wenn ich neue Felder auch wirklich brauche, führe ich sie im Select auf.

    Und der RDi mit dem Rechteck-Kopieren unterstützt einen da ja schon um eine Feldliste von STRSQL (mit F4) aus der 5250 in den LPEX zu kopieren. SEU kann das ja ebenso.
    Genauso schnell definiere ich da eine NullInd-Gruppe.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. IFS Zugriff über Windows 10 mit Windows Explorer nicht möglich
    By kolbusoergel in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 13-02-19, 19:08
  2. SQL-Cursor in geplanten Job nicht möglich?
    By Curious in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 12-06-18, 17:32
  3. Antworten: 2
    Letzter Beitrag: 08-08-16, 10:34
  4. Lesen von Opical Library 3995 C40 nicht möglich
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-11-02, 13:19
  5. Zugriff auf AS/400-Ordner nicht möglich
    By Sven Keiselt in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 30-01-01, 13:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •