Update CLOB-Feld in Oracle
Hinweis:
Wenn Sie sind nicht sicher, was ich aksing, bitte geben Sie nicht negetive feedback.
Hier ist meine situation
Ich habe eine Tabelle in der Oracle-Datenbank-Feld mit dem Datentyp CLOB. Der name des Feldes ist XMLString. Ich bin die Speicherung von XML-Zeichenkette, die 10.000 Zeichen lange für jeden Datensatz. Ich habe mehr als 100 000 Datensätze in dieser Tabelle.
Nun habe ich eine situation, wo ich brauche zu aktualisieren segment der XML-string zu jedem Datensatz an der entsprechenden Stelle. Zum Beispiel muss ich jeden Datensatz aktualisieren, an der 14th position mit einigen Zeichenfolge wie "Mein Neuer text". Dieser Ersatz-text ist 11 Zeichen lang. Also das bedeutet einfach, es ersetzt 11 characers ab 14 Charakter.
Habe ich versucht zu verwenden DBMS_LOB.FRAGMENT_REPLACE
, aber ist es nicht genau das, was ich wollte.
Ist es einfacher Befehl wie
Replace(XMLString, 14, ‘My New text’)
so, dass ich etwas tun kann, wie unten?
UPDATE MYTABLE
SET MyClobField = Replace(MyClobField, 14, 'My New text')
WHERE MyTableID>5000
Jede mögliche Hilfe würde geschätzt.
InformationsquelleAutor Shai | 2012-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQL mit
ändern Sie einfach die 2 vorkommen von "10" auf den offset.
oder in PL/SQL wie dies mit der DBMS_LOB.SCHREIBEN Sie die API (das ist schneller als die oben genannten)
substr()
arbeitet auf einer varchar2, es wird scheitern, wenn der CLOB-Länge ist größer als 32767. Es gibt CLOB-manipulation Funktionen für das in derDBMS_LOB
Paket.substr() arbeitet auf einer CLOB und varchar und wird wieder ein CLOB, wenn es auf einem clob. ich habe jedoch verpassen TO_CLOB() auf den string. so habe ich Hinzugefügt, dass in. unter SYS.STANDARD
FUNCTION SUBSTR RETURNS CLOB Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- STR1 CLOB IN POS NUMBER(38) IN LEN NUMBER(38) IN
Ich verwendet, dbms_lob.schreiben(r_lob.c, 6, 16, 'phrase'); wie oben vorgeschlagen. Bekam aber Fehlermeldung ORA-21560: argument 2 ist null, invliad, oder out-of-range-ORA-06512: at "Sys.dbms_log", line XXXX ORA-06512: in Zeile X 21560. 00000 - "argument %s ist null, ungültig, aus rance........."
Seine DBMS_LOB nicht melden
das war Tippfehler. Ich meinte zu geben LOB, aber typisierte log, das ist ovious, weil ich nicht schreiben, meine eigene Fehlermeldung. Können Sie erzählen, wie Sie zum beheben dieser Probleme? ich habe versucht, dbms_lob.kopieren, aber noch konnte nicht herausfinden, wie es zu benutzen.
InformationsquelleAutor DazzaL