Я использовал метод EXTRACT для извлечения значений из столбца типа XML в базе данных Oracle 11g.oracle XMLTABLE не работает должным образом
Если моя таблица имеет 10 строк, , как ЭКСТРАКТ используются в выбранном пункте, когда я поставил некоторые условия в XPATH как
'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
В возвращенных строках, он показывает нуль, если выражение XPATH является не соответствует, но показывает все 10 строк.
Итак, я попытался перейти на XMLTABLE, поскольку нашел, что это последнее (EXTRACT устарел). Как известно, он используется в предложении FROM. Я пробовал несколько базовых запросов и обнаружил, что он возвращает только строки, которые соответствуют выражению XPATH (пропускает нулевые строки, возвращенные в случае EXTRACT)
Одна странная проблема, которую я нашел с использованием XMLTABLE: В моей локальной среде, когда я использую выражение XPATH
'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
в результате, он выбирает только те строки, имеющие имя, содержащее «Ди» в нем.
Но когда я запускаю тот же запрос на наши условия тестирования
Он выбирает все строки вместо только выбрать имеющее имя, содержащее «Ди». Я не мог найти подсказки, почему это происходит. Я попробовал несколько запросов, устанавливающих условие на другие поля, такие как Age и т. Д., Но результат такой же. Он возвращает все строки.
Вот версий детали - Local Oracle Version -
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE 11.2.0.2.0 Production"
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Тестирование окружающей среды Oracle версии -
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE 11.2.0.3.0 Production"
TNS for HPUX: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
Существуют ли какие-либо изменения, связанные с XMLTABLE в этих версиях.
Примеры данных
Предположим, у меня есть следующая таблица
NAME | XMLDATA | CRT_TS
Ubuntu | UbuntuXMLDATA | 20-OCT-2016
Windows | WindowsXMLDATA| 20-OCT-2016
UbuntuXMLDATA
<Items>
<OperatingSystem Name="Ubuntu 12.04" Version="12.04" />
<OperatingSystem Name="Ubuntu 14.04" Version="14.04" />
<OperatingSystem Name="Ubuntu 16.04" Version="16.04" />
</Items>
WindowsXMLDATA
<Items>
<OperatingSystem Name="Windows" Version="8" />
<OperatingSystem Name="Windows" Version="7" />
</Items>
В таблице выше xmls присутствует в столбце XMLDATA.
Запрос
select Name,rx.COLUMN_VALUE as XPATH_OUTPUT from Operating_System, XMLTABLE('/Items/OperatingSystem/@Version[contains(.,"4.04")]' PASSING XMLTYPE(XMLDATA)) rx where CRT_TS = 20-OCT-2016;
Ожидаемый результат
Name | XPATH_OUTPUT
Ubuntu | 14.04
Фактический результат
Name | XPATH_OUTPUT
Ubuntu | 12.04
Ubuntu | 14.04
Ubuntu | 16.04
Вопрос Я facin g - указанный выше запрос работает нормально в моей локальной базе данных. Но против тестовой среды Он возвращает три строки вместо одной. Я не могу понять, почему? Является ли из-за несоответствия версии Oracle (я указал выше)?
Пожалуйста, разместите некоторые данные образца, запрос и неожиданный результат у вас есть – Aleksej
@Aleksej Я предоставил образцы данных. Пожалуйста, посмотрите, можете ли вы помочь –