powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Кэширование CLOB
25 сообщений из 25, страница 1 из 1
Кэширование CLOB
    #39108660
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
У кого есть какие идеи или наработки для сохранения некоторое время в памяти данных(CLOB поля)
для сессии.(апекс сессии)
Стоит задача передать в сторонний контрол данные по JSON.
У меня процедура подготавливает CLOB.
Но вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К.
Я могу в цикле на клиенте подгружать кусочками по 32К
А на сервере gbms_lob.get По 32 к отдавать по 32К.
Вся проблема в том что процедура будет дёргаться формировать весь CLOB отдавать часть.
Потом опять дёргаться формировать весь CLOB отдавать следующую часть.
Вариант сохранить в таблицу с ключём session весь CLOB
Её читать и отдавать потом удалять.
Но вообще мне бы хотелось обойтись без операций записи.
А где-то в памяти его хранить.
Использовать package CLOB как пакетную переменную нельзя ибо Мультиплексирование Connection pool может вернуть в следующем response другое oracle соединение.(во всяком случае такая вероятность есть)
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108690
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,

см. apex_colleaction.add_member или можно сразу, см.

How to Send/Upload a CLOB from the Browser to APEX via AJAX

Обратно с сервера не обязательно по кускам отдавать, можно сразу все отдать
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108695
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevirbis_al,

или можно сразу, см.

How to Send/Upload a CLOB from the Browser to APEX via AJAX

Я имею ввиду, сразу в коллекцию, насколько я помню, она тоже по кускам отдает.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108727
Vladml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А стороннему контролу ссылку на файл JSON подсунуть можно? и обновить его?
Тогда просто сохраняется в файл CLOB2JSON и ссылка подсовывается контролу.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108747
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladmlА стороннему контролу ссылку на файл JSON подсунуть можно? и обновить его?
Тогда просто сохраняется в файл CLOB2JSON и ссылка подсовывается контролу.
Вообще вариант...
Хотя конечно ,принципиально не отличается от сохранения Cloba в tablespace.
Ведь те файлы потом надо утилизировать...удалять.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108752
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevSvDevirbis_al,

или можно сразу, см.

How to Send/Upload a CLOB from the Browser to APEX via AJAX

Я имею ввиду, сразу в коллекцию, насколько я помню, она тоже по кускам отдает.

Вроде в этом примере навскидку...как загрузить сlob в апекс...а не получить его в браузер..
Хотя сейчас поэкспериментирую.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39108832
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,

Если нужно обратно на клиента, можно за одно соединение, см. wpg_docload или htp.prn
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109299
Vladml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати у меня JSON 32К получается без проблем.


JavaScript процедура
var xhr = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_all_tasks',0);
var greturn = xhr.get();
oData = JSON.parse(greturn);


On demand процесс
DECLARE
v_clob CLOB;
v_buffer varchar2(32767);
v_length number;
v_amount number := 32767;
v_offset number := 1;
BEGIN
SELECT KB.GET_ALL_TASKS() INTO v_clob FROM dual;

v_length := dbms_lob.getlength(v_clob);
while v_offset <= v_length loop
dbms_lob.read(v_clob, v_amount, v_offset, v_buffer);
htp.prn(v_buffer);
v_offset := v_offset + v_amount;
end loop;

END;

Сервер
Код KB.GET_ALL_TASKS приводить не буду и так понятно, готовим и возвращаем CLOB
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109306
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alВся проблема в том что процедура будет дёргаться формировать весь CLOB отдавать часть.

Конверти клоб в блоб и отдавай wpg_docload.download_file(l_content);
Только не забудь перед єтим заголовки отдать
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109312
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alНо вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К.
За ограничение при передаче отвечает никак не htmldb_Get а 1) Процедура которая отдает, 2) Тайминги на твоем сервере

Ну а вообще чтобы додуматься каждый раз формировать блоб чтобы отрезать от него кусочек а не читать в цикле из готового блоба порциями нужно было очень долго думать.
Ну и в конце концов есть способ отдать блоб целиком, я его отписал выше.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109339
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladmlКстати у меня JSON 32К получается без проблем.


JavaScript процедура
var xhr = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_all_tasks',0);
var greturn = xhr.get();
oData = JSON.parse(greturn);


On demand процесс
DECLARE
v_clob CLOB;
v_buffer varchar2(32767);
v_length number;
v_amount number := 32767;
v_offset number := 1;
BEGIN
SELECT KB.GET_ALL_TASKS() INTO v_clob FROM dual;

v_length := dbms_lob.getlength(v_clob);
while v_offset <= v_length loop
dbms_lob.read(v_clob, v_amount, v_offset, v_buffer);
htp.prn(v_buffer);
v_offset := v_offset + v_amount;
end loop;

END;

Сервер
Код KB.GET_ALL_TASKS приводить не буду и так понятно, готовим и возвращаем CLOB

Т.е в цикле htp.prn и будет всегда приходить всё ,что отправлено?
У Меня было такое решение(И мне оно кажется наиболее изящным),но у меня оно глючило.(из-за того что не всё приходило в асинхронном режиме)
Я ещё раз перетестирую.
У вас часто этим решением пользуются?
Какой объём Вы передаёте? "по средняку"
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109344
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casufiirbis_alНо вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К.
За ограничение при передаче отвечает никак не htmldb_Get а 1) Процедура которая отдает, 2) Тайминги на твоем сервере

Ну а вообще чтобы додуматься каждый раз формировать блоб чтобы отрезать от него кусочек а не читать в цикле из готового блоба порциями нужно было очень долго думать.
Ну и в конце концов есть способ отдать блоб целиком, я его отписал выше.
Вы неправильно поняли ,-
я хочу избежать "каждый раз формировать clob"...а хочу его сформировать единожды -закэшировать и передавать кусками.
(в цикле htp.prn были проблемы...сейчас я повторно это пересмотрю это решение раз у друго оно стабильно работает)
Сейчас изучаю примеры ,что написали для передачи целиком.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109351
Vladml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это у меня в девелопменте, данные не большие
Если я правильно понимаю, то
var xhr = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_all_tasks',0);
var greturn = xhr.get();

работает в синхронном режиме
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109355
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladmlЭто у меня в девелопменте, данные не большие
Если я правильно понимаю, то
var xhr = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_all_tasks',0);
var greturn = xhr.get();

работает в синхронном режиме
Если это так ,то вообще супер.
(Возможно причина несработки была в другом)
Я просто решил что var greturn = xhr.get();
Может не захватить все htp.prn
И это я сейчас проверю дам ему на загрузку мегабайт по 30 раз так 200...(Причём из распределённой территориально сети) если все тесты пройдут успешно значит всё ОК.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109562
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alМожет не захватить все htp.prn
wpg_docload.download_file(l_content);

Что мешает ?
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109633
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casufiirbis_alМожет не захватить все htp.prn
wpg_docload.download_file(l_content);

Что мешает ?

Ответную часть на js в браузере не знаю как сделать :-) (Мне стыдно признатьcя, но я не очень по JS)
У меня
Код: javascript
1.
2.
data=html_db.get()
СтороннийГрид.data=data;
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109639
Vladml
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже вариант, даже более элегантный
htp.p('Content-Type: application/json; charset=UTF-8');
wpg_docload.download_file(l_clob);

на клиенте ничего менять не нужно
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109939
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladmlТоже вариант, даже более элегантный
CasufiТолько не забудь перед єтим заголовки отдать
Плохо не уметь гуглить
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39109942
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати если на этом форуме поискать, можно найти
http://www.sql.ru/forum/1078101/pl-sql-json-otpravka-dannyh
с полным списоком заголовков
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110654
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al,
Могу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql.

Простите, не готов поделится кодом для всех.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110670
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelМогу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql.
Человеку нужно на клиенте получить JSON которій на сервере собран в виде клоба, тут нет ни сохранения ни загрузки, клиентская часть таая же как и для htp.p, серверных вариантов предложили аж два, бери и делай.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110688
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CasufiblkangelМогу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql.
Человеку нужно на клиенте получить JSON которій на сервере собран в виде клоба, тут нет ни сохранения ни загрузки, клиентская часть таая же как и для htp.p, серверных вариантов предложили аж два, бери и делай.

Да не важно, что за клоб и его содержимое, он отдает его в коллекцию, как Вами и предложено, и забирает от туда же. При получении в яваскрипте работайте как хотите. У меня к примеру есть такой JSON, который хранит массив JS, который легко трансоформируться в JSON и обратно.
Человек сказал, что туго с JS, я предложил помощь.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110753
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги всех Благодарю.
У меня получилось методом.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
htp.p('Content-Type: application/json; charset=UTF-8');
 --htp.p('Content-Type: application/json;charset=WINDOWS-1251');
  htp.p('Content-Disposition: attachment; filename=out.json;');
  htp.p('Content-Length: ' || dbms_lob.getlength(t_blob));
  htp.p('Cache-Control: "no-cache"');  
  htp.p('');    
 wpg_docload.download_file(t_blob);



Обратите внимание на нюанс у кого база в 1251.(Как у меня)
Надо либо
htp.p('Content-Type: application/json;charset=WINDOWS-1251');
(Что уже не современно..)
делать для этого метода ...
Либо когда конвертируете clob в blop
использовать в параметре
Код: plsql
1.
2.
  blob_csid   =>не DBMS_LOB.DEFAULT_CSID,
а blob_csid   =>NLS_CHARSET_ID ('UTF8'),
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110787
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al(Что уже не современно..)
Тут критерий немного не тот, у меня база тоже в 1251 а все веб страницы отрендерины в UTF. Основной критерий, в какой кодировке работает страница, на которой вы используете JSON, в той кодировке его и нужно отдавать.
...
Рейтинг: 0 / 0
Кэширование CLOB
    #39110805
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casufiirbis_al(Что уже не современно..)
Тут критерий немного не тот, у меня база тоже в 1251 а все веб страницы отрендерины в UTF. Основной критерий, в какой кодировке работает страница, на которой вы используете JSON, в той кодировке его и нужно отдавать.

Не ну апекс(и не только апекс) же все страницы по дефолту в UTF 8
отдаёт.
Посмотрел исходный код страницы
<meta charset="UTF-8">

У меня на линуксе
Код: plsql
1.
2.
echo $LANG
ru_RU.UTF-8



С явой работаю всегда utf 8 либо unicode
C IBM db2 express работаю там тоже хранится utf 8
Поэтому к одному знаменателю лучше приводить.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Кэширование CLOB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]