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 extrahieren
War es hilfreich?

Lö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
scroll top