[NEWSboard IBMi Forum]

Thema: SQL Problem

  1. #1
    Registriert seit
    Sep 2002
    Beiträge
    120

    SQL Problem

    Moin zusammen,
    ihr seit meine letzte Hoffnung ich weiß nicht weiter.
    .
    Auf der Power 9 V7R4 erstelle ich eine Datei, diese möchte als Excel automatisch ins Laufwerk legen für unser neues CRM System zur Automatisierung der Daten.

    Was ich bisher gelesen habe muss das mit SQL erledigt werden.

    Bei Schritt 3 kommt immer der Fehler SQL9010 ich habe schon mehrere Varianten laut KI ausprobiert



    Folgende Befehle laufen ab:


    Schritt 1:
    DLTF FILE(QGPL/V_ARKU240A)
    MONMSG MSGID(CPF2105)


    Schritt 2:
    RUNSQL SQL('CREATE VIEW QGPL.V_ARKU240A AS +
    SELECT KUNDE AS "Konto", +
    KDNR AS "Kundennummer", +
    ADRESS AS "Adresse", +
    VERTRE AS "Vertreter", +
    EMAIL AS "E-Mail", +
    HOMEPA AS "Website", +
    TELEF AS "Telefon", +
    MOBIL AS "Mobil", +
    ANSPRE AS "Ansprechpartner", +
    KUNDGR AS "Kundengruppe", +
    KUNDEI AS "Kundeneinteilung" +
    FROM GULIB.ARKU240A') +
    COMMIT(*NONE)


    Schritt 3:

    RUNSQL SQL('CALL SYSTOOLS.GENERATE_SPREADSHEET( +
    PATH_NAME => ''/BILD5/XFIRMA.XLSX'', +
    SPREADSHEET_QUERY => ''SELECT * FROM QGPL.V_ARKU240A'', +
    SPREADSHEET_TYPE => ''XLSX'', +
    COLUMN_HEADINGS => ''LABEL'')') +
    COMMIT(*NONE)

    Vielleicht kann mir jemand helfen.

    Vielen Dank
    Joachim

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.073
    1. ich habe keine Ahnung, wir machen das mit einem Tool von uns.

    2. warum call ?
    lt doku

    VALUES SYSTOOLS.GENERATE_SPREADSHEET(
    PATH_NAME => '/usr/query_spreadsheet',
    SPREADSHEET_QUERY => 'select order_number, customer, balance from orders where shipped = ''YES''',
    COLUMN_HEADINGS => 'COLUMN');
    https://www.ibm.com/docs/en/i/7.4.0?...calar-function
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.272
    Was steht denn im Joblog? Eigentlich müsste da genauer zu erkennen sein, wo das Problem liegt.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.946
    Das ist ja eine Scalare Funktion, die im Endeffekt wohl auch etwas zurück gibt.
    Auch "values" ist eine einfach Form eines Selects.
    "Values (1, 2, 'ABC')"

    Und da liegt das Problem:
    RUNSQL kann keine Resultsets verarbeiten!
    Leider ist nicht dokumentiert, was denn da zurück kommt.

    Mach also ein ILERPG draus, dann kannst du auch statt dltf einen drop table per SQL machen.
    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.978
    Da scheint die KI ziemlich gelogen zu haben!

    Mir stellt sich zunächst die Frage:
    Warum zunächst eine View erstellen? Warum nicht die Datei direkt angeben?

    Wie bereits in den vorherigen Kommentare erklärt:
    GENERATE_SPREADSHEET ist eine Funktion mit Rückgabe-Wert und kann deshalb nicht mit dem SQL CALL-Befehl aufgerufen werden.
    Bei dynamischem SQL müssen Hochkommata verdoppelt werden, also '' und keine Anführungszeichen. Allerdings ist der Unterschied nicht genau zu erkennen.
    RUN SQL unterstützt keine Funktionen und kann damit den GENERATE_SPREADSHEET nicht direkt aufrufen.
    ... aber man kann etwas "rumtricksen".
    Das folgende CL-Programm sollte ausführbar sein.
    Ich habe ein Dynamisches Compound-Statement (BEGIN ... END) verwendet, in dem die Variable RC definiert wird um den Rückgabe-Wert aus der Funktion GENERATE_SPREADSHEET aufzunehmen. Anschließend wird die Funktion GENERATE_SPREADSHEET ausgeführt. Beim Aufruf, habe ich anstatt eines SELECT-Statements direkt die Tabelle und Tabellen-Bibliothek angegeben.
    Auf eine Fehlerbehandlung habe ich an dieser Stelle verzichtet.
    Das Dynamische Compound Statement bewirkt, dass bei der Ausführung eine Stored Procedure in der QTEMP erstellt und gleich ausgeführt wird.
    ... Stored Procedures wiederum können mit RUNSQL ausgeführt werden.
    Code:
                 PGM
                 DCL        VAR(&StmtSQL) TYPE(*CHAR) LEN(4096)
    
                 CHGVAR     VAR(&STMTSQL)  +
                 VALUE('Begin +
                          Declare RC  Integer  Default 0; +
                          Set RC = SysTools.Generate_Spreadsheet( +
                                      PATH_NAME        =>  ''/Dir1/Dir2/FileName'', +
                                      LIBRARY_NAME     => ''YOURSCHEMA'', +
                                      FILE_NAME        => ''YOURTABLE'', +
                                      SPREADSHEET_TYPE => ''xlsx'', +
                                      COLUMN_HEADINGS  => ''LABEL'', +
                                      OVERWRITE        => ''REPLACE''); +
                           Return; +
                         End')
                 
                 RUNSQL  SQL(&StmtSQL) COMMIT(*NONE)
     RETURN:     RETURN
    
     EOP:        ENDPGM
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.946
    Die View macht schon Sinn, wenn man keine sprechenden Spaltennamen hat.
    Und die Hochkommata sind verdoppelt, sonst hätte es einen Sytaxfehler gegeben.
    Ein Dynamisches Compound-Statement ist da nicht gerade performant, wenn immer erst ein Programm erstellt werden muss.
    Es lohnt sich halt, über embedded SQL nachzudenken:

    exec sql set : RC = SysTools.Generate_Spreadsheet( ... );

    Man könnte sich dafür auch eine statische Prozedur generieren, die die Funktion einbettet und immer mit Parametern aufrufbar ist.
    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
    Sep 2002
    Beiträge
    120
    Hallo,

    erstmal vielen Dank für die Anregungen und Beispiele.
    Das Problem ist das ich für das Monday CRM genaue Feldbeschreibungen brauche, deshalb der Umweg über den View, damit die Datensätze zugeordnet und importiert werden können und ganz wichtig es muss eine .xlsx Datei sein eine CSV Datei ist zu groß ab 10 MB funktioniert es nicht.

    Den Vorschlag von Frau Hauser habe ich getestet lief auch durch aber es wurde keine Datei im IFS gelegt.

    PGM


    DCL VAR(&STMTSQL) TYPE(*CHAR) LEN(4096)

    DLTF FILE(QGPL/V_ARKU240A)
    MONMSG MSGID(CPF2105)

    /* 2. TEMPORÄREN VIEW MIT IHREN GEWÜNSCHTEN BESCHREIBUNGEN ANLEGEN */

    RUNSQL SQL('CREATE VIEW QTEMP.V_ARKU240A AS +
    SELECT KUNDE AS "Konto", +
    KDNR AS "Kundennummer", +
    ADRESS AS "Adresse", +
    VERTRE AS "Vertreter", +
    EMAIL AS "E-Mail", +
    HOMEPA AS "Website", +
    TELEF AS "Telefon", +
    MOBIL AS "Mobil", +
    ANSPRE AS "Ansprechpartner", +
    KUNDGR AS "Kundengruppe", +
    KUNDEI AS "Kundeneinteilung" +
    FROM GULIB.ARKU240A') +
    COMMIT(*NONE)


    CHGVAR VAR(&STMTSQL) +
    VALUE('BEGIN +
    DECLARE RC INTEGER DEFAULT 0; +
    SET RC = SYSTOOLS.GENERATE_SPREADSHEET( +
    PATH_NAME => ''/HOME/XAUSGABE'', +
    LIBRARY_NAME => ''QTEMP'', +
    FILE_NAME => ''V_ARKU240A'', +
    SPREADSHEET_TYPE => ''xlsx'', +
    COLUMN_HEADINGS => ''LABEL'', +
    OVERWRITE => ''REPLACE''); +
    RETURN; +
    END')
    ENDPGM

    Jetzt fällt mir nichts mehr ein habe es seit gestern probiert weiß auch nicht mehr weiter.

    Vielen Dank für die Anregungen

    Joachim

  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    1.066
    Excel Sheets mit SQL erstellen hab ich mal gleich in die Tonne getreten, da habe ich mich viel zu fest aufgeregt. Daher habe ich mir eine kleine CLLE geschrieben und transferiere das Ganze mittels ACS. Die Geschwindigkeit lässt etwas zu wünschen übrig, doch SQL benützt die gleiche Schiene.

    Das Vorgehen wäre dann folgendes: Du erstellst eine IBM i DB Datei mit den korrekten Angaben, es ginge mit ACS auch die Headers korrekt zu übertragen, was m.E. sowieso das Beste wäre. Dann ein Aufruf mit ACS CLLE und fettich!

    Wenn du magst stell ich die Source für nen Appel und Ei hier rein.
    kf

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.978
    Den Vorschlag von Frau Hauser habe ich getestet lief auch durch aber es wurde keine Datei im IFS gelegt.
    Bei mir läuft es problemlos durch ... und erzeugt auch das Excel-Dokument im IFS.
    Könnte sein, dass die QTEMP nicht zulässig ist. Versuch' mal die View in eine Permanente Bibliothek (z.B. QGPL) zu erstellen.
    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

  10. #10
    Registriert seit
    Sep 2002
    Beiträge
    120
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Bei mir läuft es problemlos durch ... und erzeugt auch das Excel-Dokument im IFS.
    Könnte sein, dass die QTEMP nicht zulässig ist. Versuch' mal die View in eine Permanente Bibliothek (z.B. QGPL) zu erstellen.
    Hallo Frau Hauser,

    mit der Lib QGPL habe ich es auch getestet leider auch kein Ergebnis im IFS.
    Interessant ist das auch keine Fehlermeldung kommt ob es irgendwo knallt.

    Schöne Grüsse
    Joachim G.

  11. #11
    Registriert seit
    Sep 2002
    Beiträge
    120
    Zitat Zitat von camouflage Beitrag anzeigen
    Excel Sheets mit SQL erstellen hab ich mal gleich in die Tonne getreten, da habe ich mich viel zu fest aufgeregt. Daher habe ich mir eine kleine CLLE geschrieben und transferiere das Ganze mittels ACS. Die Geschwindigkeit lässt etwas zu wünschen übrig, doch SQL benützt die gleiche Schiene.

    Das Vorgehen wäre dann folgendes: Du erstellst eine IBM i DB Datei mit den korrekten Angaben, es ginge mit ACS auch die Headers korrekt zu übertragen, was m.E. sowieso das Beste wäre. Dann ein Aufruf mit ACS CLLE und fettich!

    Wenn du magst stell ich die Source für nen Appel und Ei hier rein.
    Moinsen,

    im Moment erstelle ich Daeien per Hand über den Datentransfer ACS.

    Wäre toll wenn ich die Sourcen für nen Appel und Ei erhalten könnte.
    Leider haten wir hier schon Schützenfest dann seht das Dorf KOPF so das wir kein Bier trinken könnten.

    Danke

Similar Threads

  1. 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
  2. Problem zu Problem-ID ermitteln
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 22-09-08, 14:18
  3. embedded-SQL: Problem mit variablem SQL
    By zannaleer in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 17-12-04, 12:41
  4. SQL Abfrage Problem
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-10-01, 14:24
  5. Problem bei ILE COBOL mit sql connect to
    By rebe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-09-01, 13:55

Berechtigungen

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