Ich versuche, ein Verfahren zu schaffen, die ein XML-Daten aus einer Tabelle liest und die Werte zu analysieren und die Werte in einer anderen Tabelle einfügenein XML-Parse dynamisch
CREATE OR replace PROCEDURE Xml_parser
AS
TYPE cur_type IS ref CURSOR;
vxml XMLTYPE;
vvalue VARCHAR2(100);
l_cur_string VARCHAR2(150);
vxpath contractresignxml_master.xpath%TYPE;
vnodename contractresignxml_master.nodename%TYPE;
select_cur CUR_TYPE;
verror VARCHAR2(500);
CURSOR cur_xml_master IS
SELECT xpath,
nodename
FROM xml_master;
BEGIN
SELECT xml_col
INTO vxml
FROM holds_xml;
OPEN cur_xml_master;
LOOP
FETCH cur_xml_master INTO vxpath, vnodename;
EXIT WHEN cur_xml_master%NOTFOUND;
L_Cur_String := 'Select e.'
||Vnodename||
' From Xmltable(''/changeRequest/customerOrganisation'' Passing Xmltype('
||Vxml||
') columns '
||Vnodename||
' path '
||Vxpath||
')e';
OPEN select_cur FOR l_cur_string;
LOOP
FETCH select_cur INTO vvalue;
EXIT WHEN select_cur%NOTFOUND;
dbms_output.Put_line (vnodename
||' '
||vxpath
||':'
||vvalue);
END LOOP;
CLOSE select_cur;
END LOOP;
CLOSE cur_xml_master;
END;
XPath ist der Weg des xml und nodename bezieht sich nur auf den Namen des XML-Tags. Es gibt Hunderte von xpath, für die ich den Wert in einer Variablen erhalten und in andere Tabellen einfügen möchte. vxml ist das XML, das ich analysieren möchte.
Ich versuche, eine Select-Anweisung dynamisch zu generieren, die das XML für jeden XPath analysiert, aber einen Fehler als "Fehler (27,25): PLS-00306: falsche Anzahl oder Arten von Argumenten im Aufruf von '||' "
gibt es eine andere Möglichkeit, diese
Das Verfahren zusammengestellt wurde. Aber während ich es ausführe, erhalte ich einen Fehler als "ORA-00902: ungültiger Datentyp". Die generierte Anweisung lautet Select EY-Coordinate Aus Xmltable ('/ changeRequest/customerOrganisation' Übergeben: xml-Spalten y-Koordinatenpfad 'changeRequest/billOfMaterials/bomSiteItem/coordinates/y-coordinate') e – Vishal5364
@ Vishal5364 - der Name y-coordinate ist kein gültiger Bezeichner, daher wird ein Teil davon als Bezeichner und Teil als Datentyp interpretiert. Ich habe die dynamische Abfrage modifiziert, um den 'vnodename' in doppelten Anführungszeichen an beiden Stellen einzufügen. Beachten Sie auch, dass der Wert aus Ihrer Tabelle 30 Zeichen nicht überschreiten darf. (Idealerweise sollten Sie auch den Datentyp angeben, sonst ist der von Ihnen abgerufene Standard möglicherweise nicht geeignet und könnte später Probleme verursachen, wenn Sie den generierten Wert einfügen oder verwenden. Die Dokumentation zeigt es wie erforderlich; –
Danke, ich hatte gedacht, dass es ein Problem mit der Y-Koordinate sein kann. Ich habe immer noch Probleme, nachdem ich es korrigiert habe. Wählen Sie e. "Y-Koordinate" aus Xmltable ('/ changeRequest/customerOrganisation' Übergeben: xml Spalten "y-Koordinate" Pfad 'changeRequest/billOfMaterials/bomSiteItem/Koordinaten/y-Koordinate') e es wirft Fehler "ORA-19224: XPTY0004 - XQuery static type stimmt nicht überein: expected - node() * hat - xs: string " – Vishal5364