Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 empty_clob() vs DBMS_LOB.CREATETEMPORARY  [new]
ART-CODE
Member

Откуда:
Сообщений: 1065
В пакете, в функции, которая должна вернуть CLOB
можно обьявить возвращаемый обьект либо так
RetCLB CLOB := empty_clob();
И далее работать с этим в цикле:
RetCLB:=RetCLB ||что-то добавили
и вернули return RetCLB ;

либо, обьявить RetCLB CLOB и создать при помощи
DBMS_LOB.CreateTemporary(RetCLB ...
и записывать туда через dbms_lob.writeappend

А как лучше и почему?
Или это одно и то же?

11g, если это важно.
Читал здесь, но вопрос еще остался.
10 окт 18, 21:41    [21701032]     Ответить | Цитировать Сообщить модератору
 Re: empty_clob() vs DBMS_LOB.CREATETEMPORARY  [new]
xtender
Member

Откуда: Мск
Сообщений: 4940
ART-CODE,

в общем случае сейчас не нужно делать ни первого, ни второго, ни третьего: достаточно задекларировать как clob и конкатенировать просто с помощью ||
+
SQL> create or replace function return_clob return clob as
  2    c clob;
  3  begin
  4    c:=rpad('x',4000,' ');
  5    c:=c||rpad(' ',4000,' ');
  6    c:=c||'z';
  7    return c;
  8  end;
  9  /
SQL>
SQL> select return_clob x from dual;

X
-----------------------------------------------------------
x




                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                            z
10 окт 18, 23:59    [21701104]     Ответить | Цитировать Сообщить модератору
 Re: empty_clob() vs DBMS_LOB.CREATETEMPORARY  [new]
-2-
Member

Откуда:
Сообщений: 13858
xtender
сейчас не нужно
Многоразовая конкатенация несколько дороже, чем многоразовый writeappend в единожды createtemporary.
11 окт 18, 16:23    [21701763]     Ответить | Цитировать Сообщить модератору
 Re: empty_clob() vs DBMS_LOB.CREATETEMPORARY  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16782
Независимо от ценника на конкатенацию есть ценник на перенос из tmp в целевую таблицу.
Если лоб создается под хранение - лучше сразу туда и писать
11 окт 18, 16:50    [21701796]     Ответить | Цитировать Сообщить модератору
 Re: empty_clob() vs DBMS_LOB.CREATETEMPORARY  [new]
ART-CODE
Member

Откуда:
Сообщений: 1065
Спасибо всем за помощь.
andrey_anonymous
лучше сразу туда и писать

Это значит переделать функцию на процедуру с параметром
IN OUT NOCOPY CLOB ?
12 окт 18, 20:42    [21702941]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить