[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    131

    SQL: IFS_WRITE_UTF8 mit Variablen

    Moin,

    ich möchte in einer SQL-Prozedur per IFS_WRITE_UTF8 Daten ins IFS schreiben. Solange ich dies
    die Parameter als Konstanten (wie unten dargestellt) mitgebe, funktionierts.
    CALL QSYS2.IFS_WRITE_UTF8(
    PATH_NAME => '/home/MyFolder/testfile.txt',
    LINE => '',
    OVERWRITE => 'REPLACE',
    END_OF_LINE => 'CRLF') ;

    Ich möchte diese aber in Variablen zusammenstellen und deren Inhalt mitgeben. Dann wird die Prozedur
    aber nicht ausgeführt. Weiß jemand die funktionierende Syntax?

    Die Variante mit RPG-Programm, Exec SQL und Variablen per :Variable mitgeben bitte nicht vorschlagen.
    Es soll nur SQL genutzt werden.

    Danke!

  2. #2
    Registriert seit
    Nov 2020
    Beiträge
    331
    Mir ist die Aufgabenstellung nicht ganz klar.
    Was für Variablen meinst du wenn es nicht in RPG aufgerufen werden soll?
    Du kannst in SQL Globale Variablen erstellen, die kannst du dann auch im CALL verwenden.

    CREATE OR Replace VARIABLE deinelib.deinevar clob(1M);

  3. #3
    Registriert seit
    Jun 2009
    Beiträge
    131
    Ich hab in der SQL-Prozedur per Declare Variablen definiert die die Werte enthalten

    declare gblstring char(256)
    set gblstring = '/mypath/myfile.html'

    Sobald ich beim Call statt der Konstanten die Variable nehme, schlägt der Call fehl.

    CALL QSYS2.IFS_WRITE_UTF8(
    PATH_NAME => gblstring,
    LINE => 'xxx',
    OVERWRITE => 'REPLACE',
    END_OF_LINE => 'CRLF') ;

  4. #4
    Registriert seit
    Nov 2020
    Beiträge
    331
    Du musst die Variable qualifiziert mit der Lib angeben. Ansonsten sucht er sie (glaube ich) über den PATH (nicht LIBL) ... bin mir aber jetzt nicht mehr sicher.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Welche Fehlermeldung gibt es denn?
    I.d.R. scheitert es dann, wenn der Job in CCSID 65535 läuft.
    Die SQL-Prozedur wird in C erstellt.
    Konstanten werden nicht umgewandelt, Variableninhalte jedoch von der JOB-CCSID in die Ziel-CCSID.
    Wenn der Job auf Hex steht, weiß SQL nicht von welcher CCSID in UTF8 umgewandelt werden soll.
    Dies sollte mit eentsprechender Meldung im Joblog stehen.
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nachtrag:
    Wenn du eine IFS-Datei zeilenweise mit SQL schreiben willst, musst du dich auf arge Performancenachteile einstellen.
    Jeder IFS-Write macht einen Open, Pos, Write, Close, Update Header im IFS.
    Bei einem Test habe ich festgehstellt, dass ca. 10 Writes / Sekunde funktionieren.

    Empfehlung hier ist, die Daten nach Möglichkeit in einer Variablen vom Typ CLOB sammeln, z.B. per LISTAGG um sie dann mit einem Durchgang zu schreiben.

    Schneller war das Verfahren allerdings immer noch, die Daten in eine Tabelle zu schreiben und dann per CPYTOSTMF oder CPYFRMIMPF in einem Rutsch zu schreiben.
    Bei unserem Test z.B. statt 30 Sekunden für 300 Zeilen, nur noch 1 Sekunde.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.874
    Du musst die Variable als VARCHAR definieren ... und sicherheitshalber solltest Du auch bei der Parameter-Übergabe eventuelle führende/folgende Blanks abtrimmen.

    Code:
    declare gblstring Varchar(256);
    
    set gblstring = '/mypath/myfile.html';
    
    CALL QSYS2.IFS_WRITE_UTF8(
                        PATH_NAME => Trim(gblstring),
                        LINE => 'xxx',
                        OVERWRITE => 'REPLACE',
                        END_OF_LINE => 'CRLF') ;
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Jun 2009
    Beiträge
    131
    Danke an alle für die Hilfe!

    @Fuerchau: CCSID's vom Job und den Variablen waren schon alle korrekt gesetzt. Danke für den Hinweis auf die Performance, das check ich mal aus.

    @Birgitta: Danke für den Tip Varchar zu nehmen, das ist's wohl schlussendlich gewesen.

Similar Threads

  1. SQL Stored Procedure mit Dateinamen in einer Variablen aufrufen
    By Erol in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 20-04-20, 11:57
  2. Antworten: 2
    Letzter Beitrag: 19-02-16, 10:01
  3. SQL - Select mit variablen Feldnamen
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 25-07-07, 11:30
  4. SQL-Fehler -514 beim Aufruf eines variablen SQL über Stored Procedure
    By HDPSTANEKE in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 21-06-07, 14:33
  5. SQL mit variablen Tabellennamen
    By THH in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 19-10-06, 14:16

Tags for this Thread

Berechtigungen

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