PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Oracle Behandlung von Punkten (.)



anquijix
24-07-2008, 09:37
Hallo zusammen

Ich arbeite gerade an einem Oracle-Projekt, in dem ein Gesetz im XML-Format in die Datenbank geschrieben wird. In diesem Gesetz gibt es Artikel, Absätze, Ziffern etc.

Nun gibt es Gewisse Artikel mit Ziffern, die im Index einen Punkt haben. Zum Beispiel: art:3;abs:2;ziff:2.3.

Dies entspricht einer Klartext-Positionsangabe in einer separaten Spalte, um in der XML-Spalte den entsprechenden Node zu finden.

Wenn ich jetzt eine einfache Abfrage nach diesem Feld mache, sprich:


select * from db where position='art:3;abs:2;ziff:2.3'

dann wird mir diese Zeile auch angezeigt.

Wenn ich jedoch diese Position aus dem XML-Feld auslesen will mit Oracle-XML-Funktionen:


select rowid from db where rowid=CHARTOROWID('die_rowid') and EXISTSNODE(feld,'/xml/pfad/zu/art[@position="art:3"]/abs[@position="abs:2"]/ziff[@position="ziff:2.3"]')=1

dann erhalte ich kein Resultat obschon der zu suchende Node vorhanden ist. Dieses Verhalten ist ausschliesslich bei Nodes mit Indexes, die mit Punkten versehen sind, festzustellen.
Irgendwie kann ich nicht verstehen, warum das nicht gehen sollte. "ziff:2.3" ist ja ein String.

Ich erhalte auch keine Fehlermeldung. Und dass der Punkt in ziff:2.3 als Steuerzeichen interpretiert wird, kann ich mir kaum vorstellen. Dennoch frage ich mich, ob ich diesen Punkt speziell behandeln muss, damit das zweite oben beschriebene select eine Antwort liefert.

Waxolunist
25-07-2008, 14:19
Versuch einmal statt . \. und statt : \:

Lg, Chrisitian

undefined
25-07-2008, 17:35
XML kennt keine Typen Deklaration innerhalb von Element Knoten und ist somit immer ein TextNode (char**). Wenn du lese Probleme hast überprüfe den Zeichensatz der Datenbank und des XML Dokumentes.