Ошибки Oracle CLOB to XMLTYPE
У нас более старый сервер Oracle, 10.1.0.5... да, мы скоро обновимся. Вот некоторые важные настройки NLS:
- NLS_CHARACTERSET IS 'US7ASCII'
- NLS_LENGTH_SEMANTICS - "БАЙТ"
На вопрос... Мы хорошо сформировали XML, хранящийся в столбцах CLOB. При попытке получить данные элемента XML я использую такой синтаксис, как
select XMLTYPE(I.CLOBFIELD).EXTRACT('/Record/RecordID/text()') as Record_ID
from iTable I
Где I.CLOBFIELD - это CLOB, содержащий некоторый XML.
Обычно это прекрасно работает.
Иногда мы получаем ошибку, когда данные CLOB содержат не-ascii данные, которые были закодированы с использованием "& # xxxx;".
Например, если следующий текст
... "нарушение"...
были найдены где-нибудь в CLOB Я бы получил вышеупомянутую ошибку при выполнении этого запроса.
Левая кавычка - x201C, а правая - x201D, они сохраняются как простые ascii в xml как & # x201C и & # x201D, соответственно.
Такая пунктуация проникла в наши поля CLOB (в основном от пользователей, вырезавших и вставляющих из ms-word). В какой-то момент мы их очистим, возможно, при переносе, но сейчас нам хотелось бы, чтобы вышеуказанный запрос всегда работал, даже когда эти эквиваленты Unicode находятся в CLOB.
Примечание. Я бы использовал XMLTABLE(..), если бы мог, но он недоступен в этой редакции Oracle.
Предложения или альтернативы XMLTYPE будут приветствоваться.
Спасибо,
ссе