Создание представления SQL с данными XML в Oracle - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать представление для этого вывода, но получил ошибку ORA-04044: процедура, функция, пакет или тип здесь не разрешены. Изменение круглых скобок приведет к неверному оператору SQL или к ошибкам в круглых скобках.

Код выглядит следующим образом:

CREATE VIEW DQ AS
(SELECT
a.USERNAME AS USER,
a.ITEM AS ITEM,
a.BUSINESS AS BUSINESS,
a.ADDED AS ADDED,
(SELECT x.* FROM XMLTABLE('$Logs/Actions/Info' PASSING Logs AS "Logs"
COLUMNS
ITEM VARCHAR(30) PATH '@ITEM',
REGION VARCHAR(100) PATH '@REGION',
ADDED_NEW VARCHAR(60) PATH '@ADDED_NEW'))AS x)
FROM IDS b, IT_LOGS a, x
WHERE a.BUSINESS IN ('x', 'y', 'z')
AND x.ITEM=b.IDS(+)
AND a.ADDED BETWEEN TO_DATE ('1/1/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('2/1/2019 23:59:59,'MM/DD/YYYY HH24:MI:SS')
);

Чего мне не хватает? Спасибо.

1 Ответ

0 голосов
/ 03 октября 2019

Во-первых, не используйте зарезервированные ключевые слова 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
...