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

时间:2012-04-12 18:59:37

标签: oracle substring database clob

我有一个带数据的clob

<?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();">

2 个答案:

答案 0 :(得分:6)

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或任何其他函数使用输入字符串执行您想要的操作

答案 1 :(得分:1)

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

选项1。

  1. 将CLOB分成一系列行 - 例如如果那就是“line”的意思,那就用换行/回车字符拆分它。
  2. 检查每一行以查看它是否包含子字符串,例如onblur。如果确实如此,那么您就找到了自己的专线。
  3. 选项2。

    如果你实际上不是指,但你想要<script>...</script> html片段,你可以使用类似的逻辑:

    1. 搜索第一次出现的<script>
    2. 在该点之后搜索</script>的下一次出现。将子字符串从<script>提取到</script>
    3. 在子字符串中搜索onblur。如果找到,则返回子字符串。否则,找到下一个<script>,请转到步骤2,冲洗,重复。