|
|
|
Обработка BLOBов с помощью UDF
|
|||
|---|---|---|---|
|
#18+
При использовании в процедуре параметров BLOB (входной и выходной) после выполнения при больших N (100-1000) растёт файл базы.( как в IB 6, так и в FireBird 1.0) Данные в таблице не изменяются CREATE_BLOB1,OUT_SUM_BLOB- UDF С++, объявленные DECLARE EXTERNAL FUNCTION CREATE_BLOB1 BLOB SUB_TYPE 0 RETURNS BLOB SUB_TYPE 0 ENTRY_POINT "Create_New_Blob" MODULE_NAME "CppDLL", DECLARE EXTERNAL FUNCTION ADD_BLOB BLOB SUB_TYPE 0, BLOB SUB_TYPE 0 RETURNS BLOB SUB_TYPE 0 ENTRY_POINT "Add_Blob" MODULE_NAME "CppDLL" считывают BLOB и формируют на его основе новый. А если пытаешься складывать выходной BLOB c помощью UDF и накапливать, база увеличивается в несколько раз и память кончается!!! (Входной BLOB-примерно 3500 X 4 байта , выходной- в 1 процедуре в 3 раза <, во 2 процедуре (в 3 раза <)*(N-I) При применении UDF , в которой выходной параметр-не BLOB база не растет. Таблица пробная, на 1000 записей , необходимо обрабатывать как минимум в 50 раз >. Пожалуйста, подскажите, почему? И можно ли от этого избавиться? 1) CREATE PROCEDURE OUT_BLOB_N ( I INTEGER, N INTEGER ) RETURNS ( DAT BLOB ) AS DECLARE VARIABLE B BLOB; DECLARE VARIABLE B1 BLOB; BEGIN FOR SELECT NEWDATA FROM ELEMENTS WHERE (EL_ID>=:I)AND(EL_ID<:I+:N) INTO :B DO BEGIN B1=CREATE_BLOB1(B); END DAT=B1; SUSPEND; END 2) CREATE PROCEDURE OUT_SUM_BLOB ( I INTEGER, N INTEGER ) RETURNS ( DAT BLOB SUB_TYPE 0 SEGMENT SIZE 80 ) AS DECLARE VARIABLE B BLOB; DECLARE VARIABLE B1 BLOB; DECLARE VARIABLE S BLOB; DECLARE VARIABLE S1 BLOB; DECLARE VARIABLE F INTEGER; BEGIN F=0; FOR SELECT NEWDATA FROM ELEMENTS WHERE (EL_ID>=:I)AND(EL_ID<:I+:N) INTO :B DO BEGIN B1=CREATE_BLOB1(B); IF(F=0)THEN BEGIN /*CREATE_BLOB1-ОБРАБАТЫВАЕТ BLOB B И ВЫВОДИТ BLOB B1 */ S=CREATE_BLOB1(B); S1=S; F=F+1; END ELSE BEGIN /*ADD_BLOB-ОБЪЕДИНЯЕТ BLOB S И B1 и ВЫВОДИТ BLOB S1 */ S1=ADD_BLOB(S,B1); S=S1; END /**/ END DAT=S1; SUSPEND; END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2003, 14:28 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=511&tid=1580215]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
304ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 637ms |

| 0 / 0 |
