-
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?
-
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))
-
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
-
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
-
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.
-
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
-
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
-
By jakarto in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-07-06, 13:41
-
By GraueEminenz in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 10-07-06, 11:58
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 17
Letzter Beitrag: 11-05-06, 14:57
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks