【问题标题】:extract a substring from clob in oracle从 oracle 中的 clob 中提取子字符串
【发布时间】: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中的文本

标签: oracle substring database 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。

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

选项 2。

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

  1. 搜索第一次出现的&lt;script&gt;
  2. 在该点之后搜索&lt;/script&gt; 的下一个匹配项。提取从&lt;script&gt;&lt;/script&gt; 的子字符串。
  3. 在子字符串中搜索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 即。 标签
猜你喜欢
  • 2019-07-23
  • 2021-01-29
  • 2019-02-20
  • 1970-01-01
  • 2021-08-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多