[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.059

    Listagg in ein Feld einlesen

    Moin *all

    ich brauche für eine Anzeige das Ergebnis einer Listagg Funktion

    select substr(listagg(digits(NUMFELD), ', '), 1, 55) from ... funktioniert

    Will ich das in eine Datei umleiten (create table x/y as (... ) with data) bekomme ich einen

    SQL0802 der Art 12
    Fehler bei Datenumsetzung oder beim zuordnen der Daten.
    12 = Ergebnis einer Verknüpfungsoperation für ein Feld var.Länge übersteigt die Max. zul. Länge für die Ergebnisart.

    Auch mit Char(..., 55) oder varchar(...., 55) habe ich es versucht, selbe Meldung.

    Erstelle ich die Datei 'with no data' geht das und ich bekomme:
    55 *char wenn ohne cast
    55 *char wenn Char und
    55 *varchar wenn Varchar.

    Ich will das im embeddet sql und wollte eigendlich nur wissen wir ich das Zielfeld zu definieren habe.

    Einer ne Idee?
    Danke
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.869
    ListAGG ergibt ein CLOB/DBCLOB, der SUBSTR ergibt denselben Typ.
    Wenn das Ergebnis kleiner 32K ist, kannst du das nach dem Substr als
    cast(substr(listagg...), 1, n) as varchar(n))
    umbauen.

    Willst du das ohne Zwischendatei direkt im RPG als Hostfeld, kannst du ein DBCLOB bis 8 MB im Programm anlegen, via SQLTYPE-Funktion.
    https://www.ibm.com/docs/en/i/7.6.0?...s-that-use-sql
    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
    Jun 2001
    Beiträge
    2.059
    Ach du meine Güte ...

    ok, danke

    ich brauch nun ein Paar Werte die in Summe, incl der ', ' Trennung, in 55 Byte passen.
    Kanonen und Spatzen ...
    Danke dir
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.869
    Dann sollte ja der Cast klappen.
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.961
    Das Problem ist, dass das Ergebnis von LISTAGG länger als 4000 Byte und es dadurch zum Feldüberlauf kommt und nicht erst bei 32K wie Baldur behauptet - Dokumentation lesen! Der Feldüberlauf führt wiederum per Default zum Abbruch.
    Man könnte natürlich das Ergebnis aus Digits als CLOB formatieren, dann dürfte das Ergebnis bis zu einem MB groß werden, bevor es zu einem Überlauf und damit per Default zum Abbruch kommt.

    Wenn Dich wirklich nur die ersten 55 Byte des Strings interessieren und dir egal ist ob anschließend noch 20 oder 500 oder ... Einträge kommen, kannst Du einfach am Ende der LISTAGG-Funktion ON OVERFLOW TRUNCATE angeben.

    Etwa so:

    Code:
    Create Table YourSchema.NewTable
        as (Select Substr(ListAgg(Digits(YourColumn), ', ' ON OVERFLOW TRUNCATE), 1, 55)  as YourCol
               from YourTable)
      With data;
    Mit CAST, CHAR oder VARCHAR um den SUBSTR herum wird des nicht klappen!
    Da ist das Kind bereits in den Brunnen gefallen.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 6. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL Listagg systemfehler
    By Robi in forum NEWSboard Programmierung
    Antworten: 29
    Letzter Beitrag: 02-06-25, 11:05
  2. Problem USC2 Feld über SQL Bender TOOL in MS SQL NVARCHAR Feld
    By labm in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 07-07-21, 08:37
  3. input/output feld dspf --> automatisch aus Feld springen
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 15-09-17, 15:02
  4. SQL-Funktionen STUFF, LISTAGG, ...
    By mahones in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-07-17, 15:47
  5. Alpha-Feld in numerisches Feld
    By Mark_S in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 20-08-04, 11:53

Berechtigungen

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