Announcement

Collapse
No announcement yet.

problem mit regexp

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • problem mit regexp

    Hallo zusammen,
    ich habe ein kleines problem....

    ich steh mit regular expressions auf dem kriegsfuss und brauche jetzt eine...

    und zwar folgendes ich muss aus einem feld ein xml steuerzeichen rausbekommen das da nicht hingehört.

    folgendermassen sieht mein feld irgendwo aus:

    <feld> wert wert<wert</feld> das < was da in der mitte steht muss ich rausbekommen. Die Feldnamen varieren von eintrag zu eintrag.

    ich bräuchte also ein update-statement, welches mir dieses '<' durch ein leerzeichen ersetzt die struktur ist immer gleich also '>...<...<'

    ich hoffe mir kann einer von euch helfen....
    vielen Dank schonmal
    Gruß Joel

  • #2
    Mächtigkeit von SQL

    Hallo Joel,

    für die Lösung Deines Problems benötigst Du keine Regular Expressions, es reicht einfaches SQL.

    SQL> create Table XML( col varchar2(4000) );

    Tabelle wurde erstellt.

    SQL> insert into XML values( '<feld>1 korrekt 1<\feld>' );

    1 Zeile wurde erstellt.

    SQL> insert into XML values( '<feld>2 falsch<2<\feld>' );

    1 Zeile wurde erstellt.

    SQL> commit;

    Transaktion mit COMMIT abgeschlossen.

    SQL> column col format A30
    SQL> select * from XML;

    COL
    ------------------------------
    <feld>1 korrekt 1<\feld>
    <feld>2 falsch<2<\feld>


    Um das Update-Statement transparenter zu gestalten, wird eine View auf die Tabelle gelegt, die alle falschen Datensätze herausfiltert und die Informationen Länge "<feld>", Position des fehlerhaften Zeichens sowie Satzlänge liefert:

    SQL> CREATE OR REPLACE VIEW V
    2 AS
    3 SELECT * FROM(
    4 SELECT INSTR(col,'>',1) FLen
    5 , INSTR(col,'<',2) Pos
    6 , LENGTH(col) VLen
    7 , col
    8 FROM XML
    9 )
    10 WHERE pos < VLen - FLen
    11 /

    View wurde erstellt.


    Danach ist das Update einfach:

    SQL> update v
    2 set col = substr(col,1,pos-1) || ' ' || substr(col,pos+1);

    1 Zeile wurde aktualisiert.

    SQL> commit;

    Transaktion mit COMMIT abgeschlossen.

    SQL> select * from xml;

    COL
    ------------------------------
    <feld>1 korrekt 1<\feld>
    <feld>2 falsch 2<\feld>



    Gruß, Siegfried

    Comment

    Working...
    X