2009-08-01 3 views
0

Вот мой столКак извлечь данные из длинного столбца таблицы, строки XML

MYTABLE(ID NUMBER(10), 
     DATATYPE VARCHAR2(2 BYTE), 
     XMLDATA LONG 
) 

Note1: Я не могу изменить эту таблицу Примечание 2: Я использую Oracle 10g

Вот образец XMLDATA

Я попытался XMLType(), но это не работает с LONG типа (ORA-00997 незаконное использование LONG типа). Возможно, мне нужно скопировать значения XMLDATA в новую таблицу и преобразовать в CLOB, тогда я могу преобразовать в xmltype и использовать EXTRACTVALUE()?

Каков наилучший способ извлечь «значение для получения»?

+0

long является устаревшим, используйте clob или новые типы xml. – tuinstoel

+2

@tuinstoel: см. Примечание 1 в тексте. Таблица не может быть изменена. – DCookie

ответ

3

Ниже приведен некоторый код, который должен выводить CLOB из LONG произвольной длины. Он выгружает тело MY_TRIGGER в dbms_output. Если это сработает, вы должны проанализировать это по мере необходимости.

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; 
/
+2

+1 для примера. Если кому-то все еще нужно убедить, что Oracle LONG злой, это должно сделать это :-) – DCookie

Смежные вопросы