[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    131
    Jupp, korrekt. Danke!
    Hatte zwischenzeitlich mal in der CLOB-Definition aus dem SQFOVR einen SQFAPP gemacht, der dann ja fleißig hinten dran hängt. Aber natürlich pro Zeile ein Dokument. Das ist natürlich etwas viel des Guten.

    Aber jetzt ist man ja nur noch halbblind... der Rest sollte sich finden...

  2. #2
    Registriert seit
    Jun 2009
    Beiträge
    131
    Hallo, ich hab da doch noch mal 'ne Frage dazu.

    Ich erhalte derzeit noch die Angaben von XMLDOCUMENT vor jeder XMLROW. Habe gedacht, ich muß nur in dem auszuführenden SQL ein XMLAGG einbauen, damit der FETCH im RPG dann alles als eine Zeile zusammen bekommt.

    Baue ich aber XMLAGG ein, bekommen ich einen Conversion Error.

    Hat jemand Erfahrung mit XMLAGG und ggf. ein Beispiel?

  3. #3
    Registriert seit
    Jun 2009
    Beiträge
    131
    Kommando zurück, hab ihn gerade selbst gefunden.
    SELECT
    XMLELEMENT( Name "Range"
    XMLAGG(
    XMLROW( Feld1 as "Fld 1")... OPTION ROW "Rowfields") ) )
    FROM FILE1

  4. #4
    Registriert seit
    Aug 2014
    Beiträge
    181
    Hallo Forum,

    anbei ein cleveres SQL-Statement, das ich bei Birgitta Hauser - an dieser Stelle vielen Dank an Dich - gelernt habe. Es lohnt sich wirklich, bei ihr in den Kurs zu gehen.

    PHP-Code:
    select XMLSERIALIZE(
     
    XMLELEMENT(NAME "data"
      
    XMLAGG(
       
    XMLROW(
        
    trim(kndnr) as "nummer",
        
    trim(name)  as "name",
        
    trim(land)  as "land",
        
    trim(plz)   as "plz",
        
    trim(ort)   as "ort",
        
    trim(str)   as "strasse",
        
    umsatz      as "umsatz"    
        
    option row "item")
        )
      ) as 
    CLOB(2G)  
      
    INCLUDING XMLDECLARATION)
     AS 
    XML_DOCUMENT
     FROM 
    (
       
    select from myapp.kndstap
        where kndnr 
    1
     
    x
    Herzliche Grüße
    Rainer

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Und wie gestalte ich ein geschachteltes XML-Dokument, dass Kopf- und Positionsdaten enthält?
    Und zu den Positionsdaten ggf. Preis- und Rabattinformationen?
    Das gibt das Handbuch leider auch nicht her.
    Die Beispiele behandeln immer nur 1-stufige Hierarchien.
    Hat jemand dazu mal ein Beispiel?

    ORDER
    - KUNDE NAME = "ABCD"
    - - ARTIKEL NAME = "TEIL 1"
    - - - PREIS WERT = "10,00"
    - - - PREIS RABATT = "-5%"
    - - ARTIKEL NAME = "TEIL 2"
    - - - PREIS WERT = "9,95"
    - - ARTIKEL NAME = "TEIL 3"
    - - - PREIS WERT = "12,50"
    - - - PREIS NACHLASS = "2,45"
    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
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Und wie gestalte ich ein geschachteltes XML-Dokument, dass Kopf- und Positionsdaten enthält?
    Und zu den Positionsdaten ggf. Preis- und Rabattinformationen?
    Das gibt das Handbuch leider auch nicht her.
    Die Beispiele behandeln immer nur 1-stufige Hierarchien.
    Hat jemand dazu mal ein Beispiel?
    Die Kunst ist die Übersetzung von der relationalen Form der Datenbank in die hierarchische Form des XML-Dokuments und umgekehrt.
    Man kann ein XML-Dokument durchaus mit mehreren Common Table Expressions, deren Ergebnisse man wieder miteinander verknüpft, sortiert und weiter aggregiert aufbauen.
    Wenn man es richtig macht bleiben auch komplexe SQL-Statements zur Aufbereitung von XML-Dokumenten immer noch lesbar.

    Das kann man übrigens bei mir in der Schulung lernen.

    Birgitta
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    xml sind hierarchische Dokumente und SQL ist eine Abfragesprache für relationale Daten. (in Worten: Punkt) Sicher kann man da Schulungen machen, wie man Probleme mit untauglichen Mitteln löst, man könnte es aber auch bleiben lassen...

    D*B,
    der allen viel Spaß wünscht, mit dem Traktor ins Theater zu fahren!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Aug 2014
    Beiträge
    181
    Zitat Zitat von BenderD Beitrag anzeigen
    xml sind hierarchische Dokumente und SQL ist eine Abfragesprache für relationale Daten. (in Worten: Punkt) Sicher kann man da Schulungen machen, wie man Probleme mit untauglichen Mitteln löst, man könnte es aber auch bleiben lassen...

    D*B,
    der allen viel Spaß wünscht, mit dem Traktor ins Theater zu fahren!
    Ich freue mich an dieser Stelle auf auf ein Beispiel mit tauglichen Mitteln

    Viele Grüße
    Rainer

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... jede OO Sprache löst das mit adäquaten Mitteln auf einfachste Weise!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Aug 2014
    Beiträge
    181
    Zitat Zitat von BenderD Beitrag anzeigen
    ... jede OO Sprache löst das mit adäquaten Mitteln auf einfachste Weise!

    D*B
    Ach Dieter, wo ist denn jetzt das Beispiel?

  11. #11
    Registriert seit
    Aug 2014
    Beiträge
    181
    Hallo Dieter,

    würde das in Java so aussehen oder liege ich hier falsch. Statt dem Microsoft Access Driver müsste man hier den DB/2 JDBC-Driver einsetzen.

    PHP-Code:
    import java.io.StringWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;

    import org.w3c.dom.Document;
    import org.w3c.dom.Element;

    public class 
    Main {

      public static 
    void main(String args[]) throws Exception {
        
    DocumentBuilderFactory factory DocumentBuilderFactory.newInstance();
        
    DocumentBuilder builder factory.newDocumentBuilder();
        
    Document doc builder.newDocument();
        
    Element results doc.createElement("Results");
        
    doc.appendChild(results);

        Class.
    forName("sun.jdbc.odbc.JdbcOdbcDriver");
        
    Connection con DriverManager
            
    .getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/access.mdb");
        
        
    ResultSet rs con.createStatement().executeQuery("select * from product");

        
    ResultSetMetaData rsmd rs.getMetaData();
        
    int colCount rsmd.getColumnCount();

        while (
    rs.next()) {
          
    Element row doc.createElement("Row");
          
    results.appendChild(row);
          for (
    int i 1<= colCounti++) {
            
    String columnName rsmd.getColumnName(i);
            
    Object value rs.getObject(i);
            
    Element node doc.createElement(columnName);
            
    node.appendChild(doc.createTextNode(value.toString()));
            
    row.appendChild(node);
          }
        }
        
    DOMSource domSource = new DOMSource(doc);
        
    TransformerFactory tf TransformerFactory.newInstance();
        
    Transformer transformer tf.newTransformer();
        
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION"yes");
        
    transformer.setOutputProperty(OutputKeys.METHOD"xml");
        
    transformer.setOutputProperty(OutputKeys.ENCODING"ISO-8859-1");
        
    StringWriter sw = new StringWriter();
        
    StreamResult sr = new StreamResult(sw);
        
    transformer.transform(domSourcesr);

        
    System.out.println(sw.toString());

        
    con.close();
        
    rs.close();
      }


Similar Threads

  1. SQL Update Datei mit den Ergebnis aus einer CTE
    By oulbrich in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 09-03-17, 09:43
  2. sql 2 sätze einer gruppe
    By Robi in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 06-04-16, 16:04
  3. SQL - Mehrere Sätze in einen Satz mit mehreren Spalten
    By wti in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 11-09-15, 12:47
  4. IBM gibt Ergebnis für 4. Quartal 2001 bekannt
    By Burgy Zapp in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 09-02-02, 20:58
  5. Sätze einer Datei zählen
    By Ursus in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 09-08-01, 07:59

Berechtigungen

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