gpt4 book ai didi

sql - 从 CLOB(包含 XML)中提取特定值,同时为表的每一行创建一个分隔字符串。某些行上的 CLOB 值可能为空

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:12 30 4
gpt4 key购买 nike

一些背景:数据库是甲骨文。我正在尝试为表格的每一行创建一个分隔字符串。分隔字符串的某些值必须来自 CLOB(包含 XML)。 CLOB 在某些行上可能为空,这就是问题所在。

例如,我有一个表:'Item',其中包含以下行:'Item_ID'、'Item_CD'、'Item_TXT' (CLOB)。该表有两行。一行将以下 XML 存储在“Item_TXT”中,另一行的“Item_TXT”为空。

<OuterTag>      
<InnerTag>test</InnerTag>
</OuterTag>

我创建了以下 SQL 以返回分隔字符串的前 3 个元素:

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD 
FROM Item;

这成功了:

项目%#12345%#A

项目%#123456%#A

然后我尝试添加第 4 个元素(来自 CLOB 的值)。

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item;

失败并出现以下错误:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1

我已将此问题缩小到有时 Item_TXT 为空且 XMLTYPE() 无法处理此问题。为了证明这一点,我运行了以下命令:

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL;

这成功了:

项目%#12345%#A%#test

有没有办法处理整个表,如果可用,从 clob 中提取值,否则将 null/nothing 添加到分隔字符串?

最佳答案

顺便说一下,您的错误原因是 xmltype 构造函数存在空 lob 缺陷。我个人总是使用 xmltype.createxml(item_txt) 代替。您会发现它同样有效,而不必担心 nvl 等问题。

关于sql - 从 CLOB(包含 XML)中提取特定值,同时为表的每一行创建一个分隔字符串。某些行上的 CLOB 值可能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139329/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com