我有一个填充了CLOB的SQL表列(BINARYTEXT)。在这个CLOB中有许多属性,例如
CE.EffDate="20140106";
CE.CCY="EUR";
CE.TransactionType="STANDARDEUROPEAN";
CE.CAL="LON";
我只需要提取双引号之间包含的CE.TransactionType属性的值'STANDARDEUROPEAN'。请注意,CLOB不包含XML,只包含上述属性,没有开始或结束标记。
当我在命令中指定字符串时,我已经研究了如何使用REGEXP_SUBSTR函数执行此操作:
select REGEXP_SUBSTR('CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
from DUAL
返回:=“STANDARDEUROPEAN
我无法将此操作转换为使用CLOB作为字符串。这不起作用:
select REGEXP_SUBSTR(BINARYTEXT,'CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
from DUAL
提前致谢,
史蒂夫
答案 0 :(得分:0)
您可以使用DBMS_LOB包来提取字符串。
SELECT REGEXP_SUBSTR(DBMS_LOB.substr(BINARYTEXT,3000) ,'CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
FROM YOURTABLENAME
唯一可能遇到问题的是缓冲区大小,限制为32767字节(在我的示例中设置为3000)。如果您的数据大于此值,那么您需要以块的形式查询它。请参阅文档here
如果你需要更改你正在搜索的TransactionType,你应该创建一个函数,它将字符串的那一部分作为参数并动态构建sql。
答案 1 :(得分:0)
select BINARYTEXT from your_table
where regexp_like(dat,'^(\CE.TransactionType=)?"[^"]+"$');
EDIT2:
select BINARYTEXT from your_table
where regexp_like(dat,'^(\CE.TransactionType=)?"[^"]+"?;$');