Объединить CLOB-строки с PL / SQL - PullRequest
1 голос
/ 07 июня 2010

У меня есть таблица с идентификатором и содержимым сгустка, например:

Create Table v_example_l (
    nip number,
    xmlcontent clob
);

Мы вставляем наши данные:

Insert into V_EXAMPLE_L (NIP,XMLCONTENT) 
Values (17852,'<section><block><name>delta</name><content>548484646846484</content></block></section>');
Insert into V_EXAMPLE_L (NIP,XMLCONTENT) 
Values (17852,'<section><block><name>omega</name><content>545648468484</content></block></section>');
Insert into V_EXAMPLE_L (NIP,XMLCONTENT) 
Values (17852,'<section><block><name>gamma</name><content>54564846qsdqsdqsdqsd8484</content></block></section>');

Я пытаюсь создать функцию, которая объединяет строки сгустка, которые ушли в результате выбора, я имею в виду, что мне не нужно указывать несколько параметров для имени таблицы или чего-то подобного, я должен давать только столбец которые содержат сгустки, и он должен справиться с остальными.

CREATE OR REPLACE function assemble_clob(q varchar2)
return clob
is
v_clob clob;
tmp_lob clob;   
hold VARCHAR2(4000); 
--cursor c2 is  select xmlcontent from V_EXAMPLE_L where id=17852 
  cur sys_refcursor;  
  begin  

  OPEN cur FOR q;
    LOOP
    FETCH cur INTO tmp_lob;
    EXIT WHEN cur%NOTFOUND;
      --v_clob := v_clob ||  XMLTYPE.getClobVal(tmp_lob.xmlcontent); 
        v_clob := v_clob ||  tmp_lob;

    END LOOP;
   return (v_clob);
   --return (dbms_xmlquery.getXml( dbms_xmlquery.set_context("Select 1 from dual")) )
 end assemble_clob;

Функция не работает ... (если кто-нибудь может мне помочь, большое спасибо, и я нуб в sql, так что ....). Спасибо!

Ответы [ 3 ]

3 голосов
/ 07 июня 2010

Вы действительно не говорите, почему он сломан, но пакет DBMS_LOB имеет функцию APPEND, которая может быть тем, что вы ищете.

1 голос
/ 20 сентября 2013

попробуйте использовать

DBMS_LOB.append (v_clob,tmp_lob);
1 голос
/ 07 июня 2010

Вам придется объяснить, что происходит, а не то, что вы ожидаете. Ваш пример хорошо работает для меня. В SQLPlus обратите внимание на необходимость установки LONG на достаточно большое значение для извлечения всего содержимого CLOB.

dev> set long 2000
dev> select assemble_clob('select xmlcontent from v_example_l') from dual;

ASSEMBLE_CLOB('SELECTXMLCONTENTFROMV_EXAMPLE_L')
--------------------------------------------------------------------------------
<section><block><name>delta</name><content>548484646846484</content></block></se
ction><section><block><name>omega</name><content>545648468484</content></block><
/section><section><block><name>gamma</name><content>54564846qsdqsdqsdqsd8484</co
ntent></block></section>
...