Wie zum Extrahieren von Daten aus einer LONG-Spalte XML-Strings halten
-
06-07-2019 - |
Frage
Hier ist meine Tabelle
MYTABLE(ID NUMBER(10),
DATATYPE VARCHAR2(2 BYTE),
XMLDATA LONG
)
Hinweis 1: Ich kann diese Tabelle nicht ändern Hinweis 2: Ich bin mit Oracle 10g
Hier ist ein Beispiel von XMLDATA
<myxml version="1">
<node1>
<child1>value to get</child1>
</node1>
</myxml>
Ich habe versucht, xmltype (), aber es wird nicht mit einem LONG-Typ (ORA-00997 illegale Nutzung von LONG-Typ) zu arbeiten. Ich sollte XMLDATA Werte in eine neue Tabelle und umwandeln in ein CLOB dann kann ich konvertieren XMLTYPE und verwenden ExtractValue () ?
Was ist der beste Weg ‚Wert zu erhalten‘?
zu extrahierenLösung
Im Anschluss ist ein Code, der für die Ausgabe ein CLOB aus einem langen beliebiger Länge sollte. Es Dumps den Körper von MY_TRIGGER
zu dbms_output
. Wenn es funktioniert, sollten Sie in der Lage sein, das zu analysieren, je nach Bedarf.
DECLARE
c_chunk_limit CONSTANT INTEGER := 100;
v_cur INTEGER := DBMS_SQL.open_cursor;
v_offset INTEGER;
v_chunk VARCHAR2(32767);
v_chunk_size INTEGER;
BEGIN
DBMS_SQL.parse(
v_cur,
'SELECT trigger_body FROM dba_triggers WHERE trigger_name = ''MY_TRIGGER''',
DBMS_SQL.native
);
DBMS_SQL.define_column_long(v_cur, 1); -- 1 here represents the column position in the select list the long is column#1
IF DBMS_SQL.execute_and_fetch(v_cur) > 0
THEN
v_offset := 0;
LOOP
DBMS_SQL.column_value_long(
v_cur,
1, -- 1 here represents the column position in the select list the long is column#1
c_chunk_limit,
v_offset,
v_chunk,
v_chunk_size
);
EXIT WHEN v_chunk_size = 0;
v_offset := v_offset + v_chunk_size;
DBMS_OUTPUT.put_line(v_chunk);
END LOOP;
END IF;
DBMS_SQL.close_cursor(v_cur);
END;
/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow