извлечь подстроку из clob в oracle

У меня есть тупица с данными

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

person micheal marquiz    schedule 12.04.2012    source источник
comment
И как этот код Javascript каким-либо образом связан с Oracle?   -  person a_horse_with_no_name    schedule 12.04.2012
comment
это текст, хранящийся в CLOB таблицы   -  person micheal marquiz    schedule 12.04.2012


Ответы (2)


Том Кайт говорит, как получить varchar2 из clob в коде SQL или PL / SQL

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 или любые другие функции.

person Alexander    schedule 12.04.2012
comment
substr примет строку, начальную позицию и длину в качестве параметров substr (string, start_position, length). В этом случае я могу получить начальную позицию, используя функцию instr для тега ‹script›, но проблема в том, как извлечь подстроку только до тех пор, пока Тег ‹/script›. - person micheal marquiz; 13.04.2012
comment
Я не могу использовать pl / sql, как я могу извлечь строку с фрагментом html ‹script› ... ‹/script› с помощью DBMS_LOB.SUBSTR, мне нужно сделать это только в инструкции sql (без pl / sql) - person micheal marquiz; 14.04.2012

Разбейте проблему на части. Вы хотите извлечь строку текста из вашего CLOB, которая содержит определенную подстроку. Я могу придумать две возможные интерпретации ваших требований:

Вариант 1.

  1. Разделите CLOB на серию строк - например, разделите его на символы новой строки / возврата каретки, если это действительно то, что вы имели в виду под «строкой».
  2. Проверьте каждую строку, чтобы увидеть, включает ли она подстроку, например onblur. Если да, значит, вы нашли свою линию.

Вариант 2.

Если вы на самом деле не имеете в виду строку, но хотите получить <script>...</script> html-фрагмент, вы можете использовать аналогичную логику:

  1. Найдите первое вхождение <script>.
  2. Найдите следующее вхождение </script> после этой точки. Извлеките подстроку от <script> до </script>.
  3. Найдите в подстроке onblur. Если он найден, верните подстроку. В противном случае найдите следующее вхождение <script>, перейдите к шагу 2, промойте, повторите.
person Jeffrey Kemp    schedule 13.04.2012
comment
Позвольте задать прямой вопрос. Как я могу извлечь строку с фрагментом html ‹script› ... ‹/script› с помощью DBMS_LOB.SUBSTR, мне нужно сделать это только в инструкции sql (без pl / sql) - person micheal marquiz; 13.04.2012
comment
На какой у вас версии? SUBSTR работает с CLOB в 10g и 11g. - person Jeffrey Kemp; 13.04.2012
comment
10g, SUBSTR (str, pos, len), мне нужно сделать что-то вроде SUBSTR (str, pos, pos2), который не поддерживается :( - person micheal marquiz; 13.04.2012
comment
хм, вы понимаете, что len может быть получено из pos2 и pos? - person Jeffrey Kemp; 13.04.2012
comment
dbms.instr ('script' ›) дает начальную позицию, т.е. pos, мне нужно pos2, т.е. Тег ‹/script› - person micheal marquiz; 13.04.2012
comment
INSTR принимает необязательный 2-й параметр, начальную позицию для поиска. Вы вводите pos+1 в качестве 2-го параметра для INSTR поиска '</script>', и у вас есть позиция конечного тега. - person Jeffrey Kemp; 14.04.2012
comment
@Martijn Pieters Отмените удаление моего ответа здесь, но удалите другой! - person AVA; 09.12.2015