查询包含 CLOB 数据类型的两个表
Posted
技术标签:
【中文标题】查询包含 CLOB 数据类型的两个表【英文标题】:Querying two tables containing CLOB datatype 【发布时间】:2012-12-06 13:08:48 【问题描述】:我有两张桌子:Table1
和 Table2
。 Table1
具有列 RECORDID
、DATASOURCETYPE
和 STRINGCLOB
,而 Table2
具有列 RECORDID
、TIMESTAMP
和 CLICKTYPE
。我编写了一个查询来从STRINGCLOB
列中查找clob XML 字符串“book”,前提是它与给定的DATASOURCETYPE
匹配,如下所示:
SELECT SUBSTR(stringclob, instr(stringclob, 'type>')+5
, instr(stringclob,'</type')
- instr(stringclob, 'type>')-5
) r_type from Table1
where DataSourceType = 'Source1'
AND SUBSTR(stringclob, instr(stringclob,'type>')+5
, instr(stringclob, '</type')
- instr(stringclob, 'type>')-5
)
like '%book%'
现在,我想查找并计算上个月记录的 STRINGCLOB
列 (Table1
) 中出现的所有 '%book%' 字符串(类似于 AND TIMESTAMP > '01-Nov-12' AND TIMESTAMP < '01-Dec-12'
)和 @ 987654338@。我正在努力从两个不同的表中查询数据,知道吗?
非常感谢,
我。
【问题讨论】:
不太确定我是否理解这个问题,但如果这是 XML 数据,为什么不使用XMLType
和 xpath 等?
杰克,感谢您的评论。我不熟悉 XML 类型,但它看起来是解决问题的正确方法。谢谢。
@ilariac: 能否请您在查询中添加 FROM 子句。
@Gaurav 谢谢,我没注意到它不见了。
【参考方案1】:
这是您获取值为book
的record_type 计数的方法。
WITH t
AS (SELECT '<?xml version="1.0" encoding="UTF-8"?>
<record>
<record_number>12345</record_number>
<record_type> book </record_type>
</record>'
STRINGCLOB
FROM DUAL
UNION ALL
SELECT '<?xml version="1.0" encoding="UTF-8"?>
<record>
<record_number>6789</record_number>
<record_type> book </record_type>
</record>'
STRINGCLOB
FROM DUAL)
SELECT COUNT (1) total
FROM t
WHERE xmltype (t.STRINGCLOB).EXTRACT ('//record_type/text()') LIKE '%book%';
总计
2
现在,如果你想加入表2,基于record_id
SELECT COUNT (1) total
FROM table1 t1, table2 t2
WHERE xmltype (t1.STRINGCLOB).EXTRACT ('//record_type/text()') LIKE
'%book%'
AND t1.record_id = t2.record_id
AND t1.DataSourceType = 'Source1'
AND (TRUNC (t2.timestamp) > '01-Nov-12'
AND TRUNC (t2.timestamp) < '01-Dec-12')
AND t2.clicktype <> 'Type1'
【讨论】:
以上是关于查询包含 CLOB 数据类型的两个表的主要内容,如果未能解决你的问题,请参考以下文章