嗨,我需要从一个有一个xml列的表中提取数据。对于某些记录,xml列没有任何数据。当我使用下面的查询时,我得到了一个错误。
我们需要运行这个查询,不管这个表在xml列中是否有数据。
CREATE TABLE XMLTAB_1 (A_ID NUMBER NOT NULL
, ID VARCHAR2(50)
, A_DATE DATE
, O_ID NUMBER
, XML_KEY CLOB);
INSERT INTO XMLTAB_1 (A_ID, ID, A_DATE ,O_ID)
VALUES (11,'SA-AND-11-12345',sysdate,null);
INSERT INTO XMLTAB_1 (A_ID, ID, A_DATE ,O_ID,XML_KEY )
VALUES (12,'SA-AND-12-12345',sysdate,null,'<?xml version ="1.0" encoding ="UTF-16" standalone="n'"?><al><al_cd><comments><columns><time>2020-07-07 08:45:08 </time><auth>xzy</auth><a_status>new</a_status><assgn>katy</assgn><text>new record </text></columns><columns><time>2020-07-07 09:45:08 </time><auth>abcd</auth><a_status>in progress</a_status><assgn>katy_1</assgn><text>work in progress </text></columns></comments></al_cd></al>');
COMMIT;
SELECT A_ID
, ID
, A_DATE
, O_ID
, TO_DATE(C_time,'YYYY_MM_DD HH24:MI:SS') ctime
, auth
, status
, assgn
, cmmnt
, RANK() OVER (PARTITION BY A_ID ORDER BY TO_DATE(C_time,'YYYY_MM_DD HH24:MI:SS') DESC) rnk
FROM XMLTAB_1 a
, XMLTABLE('al/al_cd/comments/columns'
PASSING XMLTYPE(a.XML_KEY) COLUMNS
c_time VARCHAR2(100) PATH 'time'
, auth VARCHAR2(100) PATH 'auth'
, status VARCHAR2(100) PATH 'a_status'
, assgn VARCHAR2(100) PATH 'assgn'
, cmmnt VARCHAR2(100) PATH 'text') xt
我得到了错误的记录a\u id为11/12它工作正常。
ora-06502:pl/sql:数字或值错误ora:-06512 :在“sys.xmltype”第272行
谁能让我知道如何实现这一点,并删除代码中的错误。
1条答案
按热度按时间3npbholx1#
假设您不只是想在
where
子句中使用case表达式passing
条款:xpath看起来很奇怪,可能应该是'/al/al\u cd/comments/columns',尽管它可以与其中任何一个一起使用。
db<>在@vboka's上进行小提琴演奏。我已经将旧式的交叉连接改为外部应用程序,以显示具有空值的行,这需要oracle12c+。
如果您使用的是早期版本,并且可以使用带有always true条件的外部连接,这有点像黑客。db<>小提琴;或者用你的样本数据,给出: