|
|
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Добрый день. У кого есть какие идеи или наработки для сохранения некоторое время в памяти данных(CLOB поля) для сессии.(апекс сессии) Стоит задача передать в сторонний контрол данные по JSON. У меня процедура подготавливает CLOB. Но вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К. Я могу в цикле на клиенте подгружать кусочками по 32К А на сервере gbms_lob.get По 32 к отдавать по 32К. Вся проблема в том что процедура будет дёргаться формировать весь CLOB отдавать часть. Потом опять дёргаться формировать весь CLOB отдавать следующую часть. Вариант сохранить в таблицу с ключём session весь CLOB Её читать и отдавать потом удалять. Но вообще мне бы хотелось обойтись без операций записи. А где-то в памяти его хранить. Использовать package CLOB как пакетную переменную нельзя ибо Мультиплексирование Connection pool может вернуть в следующем response другое oracle соединение.(во всяком случае такая вероятность есть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 10:54 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_al, см. apex_colleaction.add_member или можно сразу, см. How to Send/Upload a CLOB from the Browser to APEX via AJAX Обратно с сервера не обязательно по кускам отдавать, можно сразу все отдать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:15 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
SvDevirbis_al, или можно сразу, см. How to Send/Upload a CLOB from the Browser to APEX via AJAX Я имею ввиду, сразу в коллекцию, насколько я помню, она тоже по кускам отдает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:19 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
А стороннему контролу ссылку на файл JSON подсунуть можно? и обновить его? Тогда просто сохраняется в файл CLOB2JSON и ссылка подсовывается контролу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:39 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
VladmlА стороннему контролу ссылку на файл JSON подсунуть можно? и обновить его? Тогда просто сохраняется в файл CLOB2JSON и ссылка подсовывается контролу. Вообще вариант... Хотя конечно ,принципиально не отличается от сохранения Cloba в tablespace. Ведь те файлы потом надо утилизировать...удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:49 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
SvDevSvDevirbis_al, или можно сразу, см. How to Send/Upload a CLOB from the Browser to APEX via AJAX Я имею ввиду, сразу в коллекцию, насколько я помню, она тоже по кускам отдает. Вроде в этом примере навскидку...как загрузить сlob в апекс...а не получить его в браузер.. Хотя сейчас поэкспериментирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:50 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_al, Если нужно обратно на клиента, можно за одно соединение, см. wpg_docload или htp.prn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 12:26 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Кстати у меня 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:12 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_alВся проблема в том что процедура будет дёргаться формировать весь CLOB отдавать часть. Конверти клоб в блоб и отдавай wpg_docload.download_file(l_content); Только не забудь перед єтим заголовки отдать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:17 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_alНо вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К. За ограничение при передаче отвечает никак не htmldb_Get а 1) Процедура которая отдает, 2) Тайминги на твоем сервере Ну а вообще чтобы додуматься каждый раз формировать блоб чтобы отрезать от него кусочек а не читать в цикле из готового блоба порциями нужно было очень долго думать. Ну и в конце концов есть способ отдать блоб целиком, я его отписал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:22 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
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 и будет всегда приходить всё ,что отправлено? У Меня было такое решение(И мне оно кажется наиболее изящным),но у меня оно глючило.(из-за того что не всё приходило в асинхронном режиме) Я ещё раз перетестирую. У вас часто этим решением пользуются? Какой объём Вы передаёте? "по средняку" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:47 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Casufiirbis_alНо вся беда апекса в том что за ajax( htmldb_Get) вызов я могу передать только 32К. За ограничение при передаче отвечает никак не htmldb_Get а 1) Процедура которая отдает, 2) Тайминги на твоем сервере Ну а вообще чтобы додуматься каждый раз формировать блоб чтобы отрезать от него кусочек а не читать в цикле из готового блоба порциями нужно было очень долго думать. Ну и в конце концов есть способ отдать блоб целиком, я его отписал выше. Вы неправильно поняли ,- я хочу избежать "каждый раз формировать clob"...а хочу его сформировать единожды -закэшировать и передавать кусками. (в цикле htp.prn были проблемы...сейчас я повторно это пересмотрю это решение раз у друго оно стабильно работает) Сейчас изучаю примеры ,что написали для передачи целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:54 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Это у меня в девелопменте, данные не большие Если я правильно понимаю, то var xhr = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_all_tasks',0); var greturn = xhr.get(); работает в синхронном режиме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 17:59 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
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...(Причём из распределённой территориально сети) если все тесты пройдут успешно значит всё ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 18:04 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_alМожет не захватить все htp.prn wpg_docload.download_file(l_content); Что мешает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 00:17 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Casufiirbis_alМожет не захватить все htp.prn wpg_docload.download_file(l_content); Что мешает ? Ответную часть на js в браузере не знаю как сделать :-) (Мне стыдно признатьcя, но я не очень по JS) У меня Код: javascript 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 09:58 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Тоже вариант, даже более элегантный htp.p('Content-Type: application/json; charset=UTF-8'); wpg_docload.download_file(l_clob); на клиенте ничего менять не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 10:37 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
VladmlТоже вариант, даже более элегантный CasufiТолько не забудь перед єтим заголовки отдать Плохо не уметь гуглить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 23:45 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Кстати если на этом форуме поискать, можно найти http://www.sql.ru/forum/1078101/pl-sql-json-otpravka-dannyh с полным списоком заголовков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 23:48 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_al, Могу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql. Простите, не готов поделится кодом для всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 10:42 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
blkangelМогу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql. Человеку нужно на клиенте получить JSON которій на сервере собран в виде клоба, тут нет ни сохранения ни загрузки, клиентская часть таая же как и для htp.p, серверных вариантов предложили аж два, бери и делай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 10:53 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
CasufiblkangelМогу на почту выслать Javascript Сохранение и загрузки CLOB. Все асинхронно, и серверную часть на pl/sql. Человеку нужно на клиенте получить JSON которій на сервере собран в виде клоба, тут нет ни сохранения ни загрузки, клиентская часть таая же как и для htp.p, серверных вариантов предложили аж два, бери и делай. Да не важно, что за клоб и его содержимое, он отдает его в коллекцию, как Вами и предложено, и забирает от туда же. При получении в яваскрипте работайте как хотите. У меня к примеру есть такой JSON, который хранит массив JS, который легко трансоформируться в JSON и обратно. Человек сказал, что туго с JS, я предложил помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 11:01 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Коллеги всех Благодарю. У меня получилось методом. Код: plsql 1. 2. 3. 4. 5. 6. 7. Обратите внимание на нюанс у кого база в 1251.(Как у меня) Надо либо htp.p('Content-Type: application/json;charset=WINDOWS-1251'); (Что уже не современно..) делать для этого метода ... Либо когда конвертируете clob в blop использовать в параметре Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 11:45 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
irbis_al(Что уже не современно..) Тут критерий немного не тот, у меня база тоже в 1251 а все веб страницы отрендерины в UTF. Основной критерий, в какой кодировке работает страница, на которой вы используете JSON, в той кодировке его и нужно отдавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 12:01 |
|
||
|
Кэширование CLOB
|
|||
|---|---|---|---|
|
#18+
Casufiirbis_al(Что уже не современно..) Тут критерий немного не тот, у меня база тоже в 1251 а все веб страницы отрендерины в UTF. Основной критерий, в какой кодировке работает страница, на которой вы используете JSON, в той кодировке его и нужно отдавать. Не ну апекс(и не только апекс) же все страницы по дефолту в UTF 8 отдаёт. Посмотрел исходный код страницы <meta charset="UTF-8"> У меня на линуксе Код: plsql 1. 2. С явой работаю всегда utf 8 либо unicode C IBM db2 express работаю там тоже хранится utf 8 Поэтому к одному знаменателю лучше приводить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 12:10 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=39108690&tid=1874775]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
208ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 543ms |

| 0 / 0 |
