2015-08-23 3 views
2

У меня есть таблица, в которой содержится около одной тысячи записей, а один из столбцов имеет тип CLOB данных, который теперь мне нужно преобразовать в XMLType из-за некоторых других причин. Как преобразовать столбец из CLOB в XMLType? БлагодаряЧтобы изменить тип столбца столбца из clob в xmltype

ответ

0

Вы можете попытаться сделать это следующим образом:

  1. Добавить столбец, имеющий тип данных как тип XML в таблице.
  2. Скопируйте данные столбца clob в недавно добавленный столбец xmltype.
  3. Оставьте столб clob.
  4. Переименуйте столбец xmltype в имя исходного столбца.

Что-то вроде этого:

alter table yourtable 
add (temp_col xmltype); 

update yourtable 
set temp_col = xmltype.createxml(clobCol); 

alter table yourtable 
drop column clobCol; 

alter table yourtable 
rename column temp_col to clobCol; 
+0

Когда я копирую данные из столбца CLOB в XmlType колонку, то она дает неопределенный тип данных error..update yourtable набор temp_col = clobCol; ..с этот запрос .. –

+0

Я получаю эту ошибку с xmltype.create (clobcol) ... Сообщение об ошибке - Ошибка SQL: ORA-31011: XML парсинг не удалось ORA-19202: произошла ошибка при обработке XML LPX-00216: недопустимый символ 7 (0x7) Ошибка в строке 3 ORA-06512: в строке «SYS.XMLTYPE», строка 5 31011. 00000 - «XML parsi ng failed " * Причина: XML-парсер возвратил ошибку при попытке проанализировать документ. * Действие: Проверьте, является ли документ, подлежащий анализу, действительным. –

+0

Похоже, что одна или несколько записей не являются хорошо сформированным XML. Проверить с помощью внешнего XML-редактора –

0

Вы можете сделать что-то вроде этого с помощью пакета DBMS_XMLPARSER:

-- Variables used for parsing the XML document 
    xml_   CLOB := 'X'; 
    p    DBMS_XMLPARSER.parser; 
    doc_   DBMS_XMLDOM.DOMDocument; 
    node_list_  DBMS_XMLDOM.DOMNodeList; 
    node_len_  NUMBER; 

    -- Convert the CLOB into a XML-document enter code here 
    P := DBMS_XMLPARSER.newparser(); 

    -- Parse the clob and get the XML-document 
    DBMS_XMLPARSER.parseclob(p, xml_); 

    -- Note that the document is parsed in local CSID even thought the xml  contains UTF8, strange but it seems to work 
    doc_ := DBMS_XMLPARSER.getDocument(p); 
    --- Bug 114812 SPM Start 
    node_list_ := DBMS_XMLDOM.getElementsByTagName(doc_, 'NODETOEXTRACT'); 
    node_len_ := DBMS_XMLDOM.getLength(node_list_); 

ПРИМЕЧАНИЕ: - переменная xml_ должно содержать сообщение в формате CLOB, чтобы разобрать его. Если XML в BLOB вы можете использовать этот метод для преобразования в CLOB

-- Convert the BLOB-message into a CLOB 
    DBMS_LOB.converttoclob(dest_lob => xml_, 
          src_blob => message_value_, 
          amount => dbms_lob.lobmaxsize, 
          dest_offset => l_dest_offsset_, 
          src_offset => l_src_offsset_, 
          blob_csid => 871,   -- 871 is UTF8 
          lang_context => l_lang_context_, 
          warning => l_warning_); 
Смежные вопросы