[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Oct 2003
    Beiträge
    117

    SQL und XML: Fehler bei Create Procedure

    Hallo,

    ich experimentiere gerade mit XML und SQL (V7R1).

    Ein Beispiel aus dem Handbuch "Database SQL programming" bekomme ich nicht zum Laufen.

    Mit einer SQL-Prozedur soll ein XML-Schema im XSR registriert werden. Beim Versuch die Prozedur zu erstellen bekomme ich die Nachricht "Anzahl definierter oder registrierter Parameterwerte stimmt nicht mit Anzahl der Parameter überein" (SQL-State 07001).

    Hier der Code:
    PHP-Code:
    CREATE  PROCEDURE  SAMPLE_REGISTER     
    LANGUAGE  SQL    
    BEGIN  
    DECLARE  CONTENT  BLOB(1M);   
    VALUES  BLOB(’<?xml  version="1.0"?><xs:schema ..... </xs:schema>’) 
    INTO  CONTENT; 
    CALL SYSPROC.XSR_REGISTER(’POSAMPLE’,   ’CUSTOMER’,
      ’http://posample.org’, CONTENT,  null);    
    END
    Syntaxfehler?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Prüfe mal die Parameter für XSR_REGISTER.

    Problematisch erscheint mir der NULL-Parameter.
    da der unspezifiziert ist, musst du hier entsprechend dem Parameter casten, z.B.

    CAST(NULL AS VARCHAR(N))
    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
    Aug 2001
    Beiträge
    2.928
    Die Registrierung läuft über IBM i Navigator korrekt (mit NULL).

    Es könnte sein, dass die Zuordnung zum Datentyp innerhalb einer stored procedure nicht funktioniert. Definiere doch einfach eine BLOB-Variable, die nicht initialisiert wird (also Wert NULL hat) und übergib diese Variable als Parameter.

    Ich hab' es übrigens auch noch nicht geschafft ein gültiges Schema zu registrieren. Der XSR_REGISTER hat zwar funktioniert, aber der XSR_COMPLETE läuft bei mir jedes Mal auf Fehler.

    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

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,
    also bei mir hat beides funktioniert.
    Hier ein kleiner Auszug aus meiner Schulung:
    (P.S.: Commit ist erforderlich!! Also auch zwischendurch ein COMMIT absetzen)

    1. Sicherstellen, dass das XSD nicht schon zuvor registriert wurde
    Code:
    CALL SYSPROC.XSR_remove ('PRANLIB', 'ArrayOfLogin')
    2. Variable erstellen und das XSD aus dem IFS importieren
    Code:
    create or replace variable pranlib.var1 blob
    set pranlib.var1 =GET_xml_FILE('/home/prouza/login.xsd')
    3. XSD registirieren
    Code:
    CALL SYSPROC.XSR_REGISTER('PRANLIB', 'ArrayOfLogin', null,
    pranlib.var1  , null)
    4. Finalisieren
    Code:
    call sysproc.xsr_complete ('PRANLIB', 'ArrayOfLogin', null, 0)
    XSD selbst schaut vereinfacht wie folgt aus:

    HTML-Code:
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
      <xs:element name="ArrayOfLogIn">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="LogIn">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="User" type="xs:string" minOccurs="0" />
                  <xs:element name="Password" type="xs:string" minOccurs="0" />
                 <!-- usw... -->
                 </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Interessant wird es dann, wenn du dann das XML in eine Relationale Datenbank importieren willst. Dafür musst du zusätzlich im XSD ein entsprechendes Mapping includieren.

    lg Andreas

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    117
    Vielen Dank schonmal für eure Antworten.
    Und danke Andreas für das schöne Beispiel.
    Schonmal gut zu wissen, dass es funktionieren kann.
    Auflösen eines XML in eine relationale Datenbank ist das Endziel.

    Werde erst einmal einiges umbauen und melde mich dann wieder.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Wenn Du unbedingt mit XML-Schema arbeiten musst, sind die Stlored Procedures die beste Möglichkeit.

    Ansonsten kannst Du Dir auch mal den XMLTABLE anschauen. Mit dieser UDTF kann man Werte gezielt aus einem XML-Dokument auslesen und in eine relationale Form bringen. Das SELECT-Statement kann man dann einfach in einem INSERT-Statement unterbringen. Etwa so:

    Code:
    Insert into YourTable
    Select  *
       From XMLTABLE('/root/Dir1/Dir2' 
               Passing xmlparse(Document Get_xml_file('/home/MyDir/YourXMLDoc.xml')) 
               Columns "Fld1"  Varchar(30),
                       "Fld2"  Varchar(35) Path 'Dir3/Fld2',
                       "Fld3"  Dec(11, 2)   Path '../Wert') x;
    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
    Oct 2003
    Beiträge
    117
    Danke Birgitta für den Tipp, so weit bin ich noch nicht vorgedrungen ... noch ca. 30 Seiten ^^ )

    Übrigens habe ich gerade herausgefunden, wo das Problem lag.
    Ganz gemein:
    Durch das Kopieren des Beispiels aus dem PDF wurde im Navigator das Hochkomma nicht mehr erkannt.
    Nach find / replace funktioniert es jetzt.

Similar Threads

  1. SQL UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  2. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  3. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  4. SQL -> CREATE VIEW
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 11-05-06, 14:57
  5. Store Procedure Fehler SQL0579
    By Sven Schneider in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 21-11-05, 21:05

Berechtigungen

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