Во-первых, не используйте зарезервированные ключевые слова Oracle, такие как USER
, в качестве имен столбцов, если вы можете избежать этого.
Во-вторых, вы не показали нам свой XML, поэтому мне пришлось угадывать его структуру,Если ваш XML не похож на мой пример, отредактируйте ваш вопрос, чтобы добавить его.
Но главное, что XMLTABLE возвращает таблицу, поэтому вы должны поместить ее в предложение FROM вместе с другими таблицами. Здесь есть множество других примеров с использованием XMLTABLE, на которые вы тоже можете посмотреть.
-- example data
with IT_LOGS as (select XMLTYPE('<Logs><Actions><Info ITEM="item1" REGION="region1" ADDED_NEW="added1" /></Actions></Logs>') as Logs,
'user' as username, 'x' as business
from dual)
-- query
select a.username, c.item, a.business, c.region, c.added_new
from IT_LOGS a
cross join XMLTABLE('/Logs/Actions/Info' PASSING a.Logs
COLUMNS
ITEM VARCHAR(30) PATH '@ITEM',
REGION VARCHAR(100) PATH '@REGION',
ADDED_NEW VARCHAR(60) PATH '@ADDED_NEW') c;
Вывод:
USERNAME ITEM BUSINESS REGION ADDED_NEW
user item1 x region1 added1