Заменить недопустимые символы XML значением из таблицы Oracle PL \ SQL - PullRequest
2 голосов
/ 06 июня 2011

У меня есть требование проверить все текстовые поля в схеме базы данных на наличие любых недопустимых символов XML и заменить их предопределенным набором допустимых значений.Это должно стать частью правила преобразования данных, которое может быть вызвано из других функций.Так что эту функцию можно было бы вызвать более миллиарда раз в нашем наборе данных, поэтому мне нужно, чтобы она работала действительно эффективно.

т.е. & = AND, '= APOS

Пример того, что нужнодолжно быть достигнуто с помощью функции:

Update sometable set somefield = functioncall('f&re'd');

должно привести к тому, что поле somefield имеет значение 'fANDreAPOSd'

Это должно выполняться универсальным типомФункция PL / SQL, которая принимает ввод текстового поля, выполняет итерацию по этому полю и заменяет все недопустимые значения.

Я посмотрел на http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:2612348048

http://decipherinfosys.wordpress.com/2007/11/27/removing-un-wanted-text-from-strings-in-oracle/

Для некоторых идей, но у меня есть опасения по поводу эффективности и гибкости этих решений.

Способ, которым клиент хочет обработать решение, состоит в том, чтобы настроить таблицу, содержащую недопустимый символ, и это предпочтительнеезамена.Затем функция использует значения, выбранные из этой таблицы, для предварительной замены.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

ну, не совсем то, что вы хотите, но учтите следующее:

create type xmltest is object (s clob);

select XMLTYPE.createXml(xmltest('a& and ''')) from dual;

XMLTYPE.CREATEXML(XMLTEST('A&'''))
-------------------------------------------------------------------------------------
<XMLTEST>
  <S>a&amp; &apos;</S>
</XMLTEST>

Однако список предопределенных XML-сущностей довольно мал, поэтому проблем не возникнетзаменив их на replace

0 голосов
/ 19 сентября 2011

Если это из-за XML, я буду поддерживать hal9000 - вы должны позволить Oracle сделать это за вас.Например, Функции XML делают это автоматически:

SQLPLUS> set define off
SQLPLUS> select xmlelement("e", 'foo & bar <> bar "hemingway''s"') from dual;

XMLELEMENT("E",'FOO&BAR<>BAR"HEMINGWAY''S"')
--------------------------------------------------------------------------------
<e>foo &amp; bar &lt;&gt; bar &quot;hemingway&apos;s&quot;</e>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...