从 oracle 中的 clob 中提取子字符串

Posted

技术标签:

【中文标题】从 oracle 中的 clob 中提取子字符串【英文标题】:extract a substring from clob in oracle 【发布时间】:2012-04-25 04:16:38 【问题描述】:

我有一个数据块

<?xml version='1.0' encoding='UTF-8'?><root available-locales="en_US" default-locale="en_US"><static-content language-id="en_US"><![CDATA[<script type="text/javascript">
function change_case()

    alert("here...");
    document.form1.type.value=document.form1.type.value.toLowerCase();

</script>

<form name=form1 method=post action=''''>
<input type=text name=type value=''Enter USER ID'' onBlur="change_case();">
<input type=submit value=Submit> </form>
</form>]]></static-content></root>

我想提取带有 onblur 属性的行,在这种情况下:

<input type=text name=type value=''Enter USER ID'' onblur="change_case();">

【问题讨论】:

这个 Javascript 代码与 Oracle 有什么关系? 是存储在表的CLOB中的文本 【参考方案1】:

Tom Kyte 说如何在 SQL 或 PL/SQL 代码中从 clob 获取 varchar2

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:367980988799

当你有 varchar2 时,你可以使用 SUBSTR 或 REGEXP_SUBSTR 函数来提取行。

http://docs.oracle.com/cd/B14117_01/server.101/b10759/functions147.htm#i87066

http://docs.oracle.com/cd/B14117_01/server.101/b10759/functions116.htm

如果你想使用 SQL 代码,你可以创建这个请求

select col1, col2, func1(dbms_lob.substr( t.col_clob, 4000, 1 )) from table1 t

在 PL/SQL 函数“func1”中,您可以使用 SUBSTR 或任何其他函数对输入字符串执行您想要的操作

【讨论】:

substr 将字符串、起始位置和长度作为参数 substr(string, start_position, length),在这种情况下,我可以通过使用 标签。 我不能使用 pl/sql,如何使用 DBMS_LOB.SUBSTR 提取带有 html 片段 的行,我只需要在 sql 语句中执行(没有 pl/sql)【参考方案2】:

细分您的问题。您想从包含特定子字符串的 CLOB 中提取一行文本。对于您的要求,我可以想到两种可能的解释:

选项 1。

    将 CLOB 拆分为一系列行 - 例如如果这确实是您所说的“行”,则将其拆分为换行符/回车符。 检查每一行是否包含子字符串,例如onblur。如果是这样,您已经找到了您的线路。

选项 2。

如果您实际上不是指,而是想要&lt;script&gt;...&lt;/script&gt; html 片段,则可以使用类似的逻辑:

    搜索第一次出现的&lt;script&gt;。 在该点之后搜索&lt;/script&gt; 的下一个匹配项。提取从&lt;script&gt;&lt;/script&gt; 的子字符串。 在子字符串中搜索onblur。如果找到,则返回子字符串。否则,找到下一个出现的&lt;script&gt;,转到第2步,冲洗,重复。

【讨论】:

让我提出一个直接的问题。如何使用 DBMS_LOB.SUBSTR 提取带有 html 片段 的行,我只需要在 sql 语句中执行它(没有 pl/sql) 你用的是什么版本? SUBSTR 适用于 10g 和 11g 中的 CLOB。 10g,SUBSTR(str,pos,len),我需要做一些不支持的事情,比如 SUBSTR(str,pos,pos2) :( 嗯,你知道len可以从pos2和pos派生吗? dbms.instr('script'>) 给出起始位置,即.. pos,我需要 pos2 即。 标签

以上是关于从 oracle 中的 clob 中提取子字符串的主要内容,如果未能解决你的问题,请参考以下文章

从 Oracle 表中提取 300,000 个字符的 CLOB 到 CSV

使用 Oracle 数据库中的 SQL 从 CLOB 数据中提取数据

使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据

Oracle 是不是提供从已解析的字符串/clob 行返回多个子字符串的方法?

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥