Datenbank-Feld mit Textinhalt in Spalten umwandeln

Rosapinguin

Benutzer
Beiträge
6
Hallo zusammen,

ich habe folgendes Problem. Ich habe eine Tabelle in meiner Datenbank, die wichtige Inormationen in einem Textfeld beinhaltet. Das Format dieses Textfelds ist in diesem Fall ein XML-Format und sieht ungefähr so aus:

<TESTTABELLE xsi:schemaLocation="http://www.testfirma.de" xmlns="http://www.testfirma.de" xmlns:xsi="http://www.test.org/2001/XMLSchema-instance">
<Anfrage1><WertA="x" WertB="y" WertC="z"/></anfrage1>
<Anfrage2><WertD="xx" WertE="yy"</Anfrage2>
</TESTTABELLE >

Die Tabelle besteht natürlich aus mehreren Spalten. Die anderen sind "normale" Einzelinformationen, wie gueltigkeit und ID.

Und ich würde gerne dieses Testfeld irgendwie aufbrechen, sodass ich die Werte für WertA,B,C,D und E in einzelnen Spalten sehen kann.

WertA || WertB || WertC || WertD || WertE
x || y || z || xx || yy

Weiß einer von euch wie ich da verfahren soll, oder ob es überhaupt möglich ist?

Vielen Dank und beste Grüße
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Und ich würde gerne dieses Testfeld irgendwie aufbrechen, sodass ich die Werte für WertA,B,C,D und E in einzelnen Spalten sehen kann.

Weiß einer von euch wie ich da verfahren soll, oder ob es überhaupt möglich ist?

Vielen Dank und beste Grüße

Soweit ich weiß hat MySQL keinerlei Funktionen für XML-Verarbeitung. PG hat sowas, aber ich bin da auch nicht 'fit' damit und hilft Dir ja eh nicht weiter.
Ich denke, innerhalb der DB das aufzubrechen ist sicher möglich (Anwendung diverser String-Funktionen), aber sicherlich nicht trivial.
Ein Ansatz wäre vielleicht in INSERT -TRIGGER, der eben den String da zerlegt und die einzelnen Felder füllt.


Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.582
Dem stimme ich zu. Der Aufwand von einem derartigen Trigger hängt auch stark vom Aufbau deines XML Textfeldes ab. Z.B. bei unterschiedlicher Anzahl von Variablen etc.
 

Rosapinguin

Benutzer
Beiträge
6
Hmmm..ja hab mir schon gedacht, dass das ganze sicher nicht trivial ist. Ich versteh auch echt nicht warum die DB-Kollgen das so verprogrammiert haben.
Aber abngesehen, davon dass das ein XML-Feld ist, kann SQL auch insgesamt keine Texte auseinander nehmen. Also wenn es kein XML-Feld wäre und da einfach nur
"WertA=x, WertB=y, WertC=z" in dem Feld stehen würde..also als normaler Text, ist es dann auch nicht möglich einzelne Werte auszugeben?
 

akretschmer

Datenbank-Guru
Beiträge
9.423
Hmmm..ja hab mir schon gedacht, dass das ganze sicher nicht trivial ist. Ich versteh auch echt nicht warum die DB-Kollgen das so verprogrammiert haben.
Aber abngesehen, davon dass das ein XML-Feld ist, kann SQL auch insgesamt keine Texte auseinander nehmen. Also wenn es kein XML-Feld wäre und da einfach nur
"WertA=x, WertB=y, WertC=z" in dem Feld stehen würde..also als normaler Text, ist es dann auch nicht möglich einzelne Werte auszugeben?

Geht schon, geht alles, mit Deinem String da z.B.:

Code:
test=*# select split_part(trim(regexp_split_to_table('WertA=x, WertB=y, WertC=z',',')),'=',1) as variable, split_part(trim(regexp_split_to_table('WertA=x, WertB=y, WertC=z',',')),'=',2) as value;
 variable | value
----------+-------
 WertA    | x
 WertB    | y
 WertC    | z
(3 rows)

Mit viel Aufwand geht das auch mit Deinem XML-String. Aber a) bin ich da zu faul und b) hab ich PG, nicht MySQL. Es wäre also eh für Dich nicht brauchbar. PG hat auch direkt XML-Funktionen, wo man in XML-Dokumenten suchen kann, IIRC kann man das sogar mit Indexen machen. Aber ich hab mich damit noch nie beschäftigt, sorry.

Andreas
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Ach ok, nu hab ichs gecheckt..."TRIGGER" ist auch ein sql befehl. hmm muss ich mal zurechtgoogeln

Das ist unwesentlich mehr als nur ein Befehl, es ist eher ein Konzept. Ein TRIGGER ist eine Aktion, die die DB auslöst, wenn ein bestimmtes Ereignis eintritt. Ereignis z.B. Insert oder Update oder Delete eines einzelnen Datensatzes oder einer kompletten Tabelle, Aktion im Sinne einer stored procedure (z.B.), die dann ausgelöst wird.
 
Oben