Ste*_*eve 5 regex sql oracle clob substr
我有一个 SQL 表列 (BINARYTEXT),其中填充了CLOB。这个 CLOB 中有许多属性,例如,
CE.EffDate="20140106";
CE.CCY="EUR";
CE.TransactionType="STANDARDEUROPEAN";
CE.CAL="LON";
Run Code Online (Sandbox Code Playgroud)
我只需要提取双引号之间包含的 CE.TransactionType 属性的值,即“STANDARDEUROPEAN”。请注意,CLOB 不包含 XML,仅包含上述属性,没有开始或结束标记。
当我在命令中指定字符串时,我已经弄清楚如何使用 REGEXP_SUBSTR 函数来执行此操作:
select REGEXP_SUBSTR('CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
from DUAL
Run Code Online (Sandbox Code Playgroud)
返回:=“标准欧洲”
我无法将其操纵为使用 CLOB 作为字符串。这不起作用:
select REGEXP_SUBSTR(BINARYTEXT,'CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
from DUAL
Run Code Online (Sandbox Code Playgroud)
这会出现一个空白整数错误,尽管我不确定为什么它需要一个整数。
您可以使用 DBMS_LOB 包来提取字符串。
SELECT REGEXP_SUBSTR(DBMS_LOB.substr(BINARYTEXT,3000) ,'CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype
FROM YOURTABLENAME
Run Code Online (Sandbox Code Playgroud)
您可能遇到的唯一问题是缓冲区大小,它限制为 32767 字节(在我的示例中设置为 3000)。如果您的数据大于此,那么您需要分块查询。请参阅此处的文档
如果您需要更改正在搜索的 TransactionType,您可能应该创建一个函数,该函数将字符串的该部分作为参数并动态构建 SQL 内容。