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

    DB2 xml-file läßt sich nicht im IFS speichern

    Hallo zusammen,

    ich habe per SQL eine XML-Datei erstellt. Normaler Create Table mit diversen SQL-XML-Anweisungen, Zeile als Clob ausgegeben. Läßt sich normal handhaben. Allerdings bekomme ich sie nicht ins IFS gespeichert.

    CPYTOIMPF z.B. findet das Member nicht (ist aber beim DSPFD da), FTP tut's auch nicht.

    Woran kann das liegen?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Was willst du mit CPYTOIMPF erreichen?
    Eine XML in eine Datei schreiben?
    Dann solltest du deinen 1 SQL so ändern, dass der Umweg über IFS entfällt.

    insert into .... select .....
    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 2009
    Beiträge
    128
    Das Ergebnis soll auf der AS/400 zur Verfügung stehen und auf einer anderen Anwendung die mit AS/400 nichts zu tun hat. Da wir mehrere Environments (Bibliotheken) und Maschinen haben, war es für mich easy das SQL in jedem Environment laufen zu lassen. Die XML-Daten stehen dann in der Datei. Ich muß sie nur für die andere Anwendung ins IFS stellen.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nachfrage:
    "Die XML-Daten stehen dann in der Datei:"
    Ich nehme an, du meinst die XML-Daten stehen in der PF in einem entsprechend großen Feld (CLOB)?
    Es könnte sein, dass CLOB von CPYTOIMPF gar nicht unterstützt wird!

    Also:
    Welche Fehlermeldung gibt es genau?
    Kannst du den embedded SQL nicht einfach wiederholen, diesmal als Ziel in eine CLOB_FILE-Variable?
    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
    Jun 2009
    Beiträge
    128
    Zur Nachfrage:
    Ich glaube da liegst Du richtig. Hab rumprobiert, und lande jetzt bei folgendem Fehler:
    " CPF428A - open of Member xxxx File xxx in xxx failed. Reason Code 1: File conains one or more large object fields..."

    Hab jetzt zuletzt übrigens den CPY-Befehl genommen.

    Das ist kein embedded SQL, sondern ein SQL Statement das im IFS abgelegt wird (ruf ich einfach per RUNSQLSTM).
    Der Aufbau ist grob:

    CREATE TABLE
    SELECT
    XMLSERIALIZE(
    XMLROW(...) as CLOB(2G) )
    as XMLDOCUMENT

    FROM...
    ) with Data

    Was würdest Du anders machen?

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Verstehe ich das richtig?
    Erstellst eine Tabelle mit einer XML-Spalte, in die Du dann über einen Insert das XML-Statement schreibst.
    Im Anschluss willst Du diese Tabelle bzw. das XML-Dokument im IFS speichern?

    Wenn das Deine Idee ist, warum der Umweg über eine Tabelle und warum nicht direkt ins IFS schreiben. Mit (embedded) SQL ist das ein 3-Zeiler. Das komplizierteste ist das SQL-Statment zu generieren.

    In dem folgenden Beispiel wird ein XML-Dokument generiert und direkt ins IFS geschrieben.
    Code:
       DCL-S MyXMLDoc SQLType(XML_CLOB_File);                                        
     
       Exec SQL   Set Option  Commit=*None, DatFmt=*ISO, TimFmt=*ISO,                
                              Naming=*SYS,  CloSQLCsr=*EndActGrp;                    
      //****************************************************************************            
         Clear MyXMLDoc;                                                             
                                                                                     
         MyXMLDoc_Name = '/home/YourDir/YourXML.xml';                               
         MyXMLDoc_NL   = %Len(%Trim(MyXMLDoc_Name));                                 
         MyXMLDoc_FO   = SQFOVR;        //Neue IFS Datei oder vorh. ersetzen       
                                                                                     
         Exec SQL                                                                    
             Select XmlDocument                                                      
                      (xmlgroup(EmployeeNo as "PersNo",                              
                                Trim(Trim (FirstName) concat ' ' concat              
                                     Trim(Name)) as "PersName",                      
                                Address    as "Street",                              
                                ZipCode    as "ZipCode",                             
                                City       as "City"                                 
                                Order By City Desc, Name                             
                                Option Row "Employee"                                
                                Root "Staff"))                                       
               into :MyXMLDoc                                                        
               From LobStaff;                                                        
                                                                                     
         If SQLCODE < *Zeros;                                                        
            Dsply 'Fehler';                                                   
         else;                                                                       
            Dsply 'XML Document erstellt';                                          
         EndIf;                                                                      
                                                                                     
       *InLR       = *On;
    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

  7. #7
    Registriert seit
    Jun 2009
    Beiträge
    128
    Es gibt nur dieses eine SQL Statement, welches den Select in XML-Formatierung in ein CLOB-Feld stellt und daraus eine Tabelle schreibt.
    Mit den Daten kann ich dann die AS/400 basierte Anwendung schon mal füttern, soweit so gut.
    Da ich aber die gleichen Daten auch noch für eine andere Anwendung brauche, dachte ich: Datei kopieren und ab dafür.

    Aber die Large-Object Felder wie CLOB und BLOB scheinen bei CPYTOIMPF & Co Probleme zu verursachen. Auch QSH (cp Command) streikt.

    Dein Ansatz, per embedded RPG gleich ins IFS zu schreiben ist natürlich naheliegend. Werd ich dann auch so machen.

    Aber irgendwie dann doch befremdlich, das offensichtlich keiner der "out-of-the-box"-Kopierbefehle damit klarkommt. Es sei denn Dir fällt noch einer ein?

    Ansonsten erstmal: Schönes Wochenende und danke!

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    @Birgitta
    Nun, vielleicht weil er geschrieben hat, dass er beides braucht?
    Und ich ihm bereits gesagt habe, dass er dann beides per SQL machen soll?

    @MSOST

    D myfile SQLTYPE(CLOB_FILE) CCSID(1208)
    myfile_name = '/Pfad/Name.xml'; // StreamFile
    myfile_nl = %len(%trim(myfile_name)); // NameLength
    myfile_fo = SQFOVR; // FileOverwrite

    SELECT
    into : myfile
    XMLSERIALIZE(
    XMLROW(...) as CLOB(2G) )
    as XMLDOCUMENT

    FROM...

    Ich finde das schon einfach genug.
    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

  9. #9
    Registriert seit
    Jun 2009
    Beiträge
    128
    Ich kenn zwar Birgitta's Frage nicht, aber: Jupp, ich dachte ans kopieren weil ich beides brauche. Und bei gut 150 Environments stellt sich schon mal die Frage ob ein einfaches Kopieren nicht schneller geht als 150x den SQL zweimal laufen zu lassen...

    Vielleicht geh ich das am Montag einfach andersrum an: Den SQL ins IFS schreiben lassen, und dem Import auf der AS/400 dann einfach beibringen aus dem IFS zu lesen.

    Erstmal: Schönes WE!

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von Fuerchau Beitrag anzeigen
    D myfile SQLTYPE(CLOB_FILE) CCSID(1208)
    XMÖ sollte in eine XML_CLOB_FILE ausgegeben werden, CCSID lässt sich bei CLOB_FILEs nicht so einfach setzen, bzw. wird ignoriert.

    XML_CLOB_FILEs werden per Default in UTF-8 erstellt, bzw. die Daten in UTF-8 konvertiert.

    Birgitta
    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

Similar Threads

  1. Client lässt sich nicht mit gewünschtem Profil starten
    By Kistenschieber in forum NEWSboard Linux
    Antworten: 0
    Letzter Beitrag: 10-02-17, 14:01
  2. Spool mit Status FIN läßt sich nicht entfernen
    By procher in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 22-07-03, 07:52
  3. Management Central lässt sich nicht starten
    By Frank Hildebrandt in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-05-03, 09:58
  4. FTP Server lässt sich nicht mehr starten
    By Schnichels in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 10-10-02, 15:04
  5. Verzeichnis laesst sich nicht loeschen..Bitte um Hilfe!
    By Bernhard in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 20-11-01, 08:39

Tags for this Thread

Berechtigungen

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