使用Oracle中的XML数据创建SQL视图

问题描述 投票:0回答:1

我正在尝试为此输出创建视图,但收到错误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')
);

我想念的是什么?谢谢。

sql oracle view toad xmltable
1个回答
0
投票

首先,请勿将USER之类的Oracle保留关键字用作列名。

第二,您没有向我们展示您的XML,所以我不得不猜测它的结构。如果您的XML与我的示例不同,请编辑问题以添加它。

但是主要是XMLTABLE返回一个表,因此您应该将其与其他表一起放在FROM子句中。您也可以查看使用XMLTABLE的a lot of other examples on here

-- 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
© www.soinside.com 2019 - 2024. All rights reserved.