powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хранимая процедура c BLOB
22 сообщений из 22, страница 1 из 1
Хранимая процедура c BLOB
    #38913727
Leo1121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема:
При выполнении процедуры размер базы
возрастает более 1G

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR ALTER PROCEDURE GET_TEST
RETURNS (
    BLB_R BLOB SUB_TYPE 1 SEGMENT SIZE 80)
AS
DECLARE VARIABLE i INTEGER;
BEGIN
  blb_r = '';
  i = 0;
  WHILE (i < 10000) DO
  BEGIN
    blb_r = blb_r||'sasas'||i;
    i = i + 1;
  END
  SUSPEND;
END



что не так?
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913730
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo1121,

Плодишь временные блобы.
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913731
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo1121,

Попробуй:

CREATE OR ALTER PROCEDURE GET_TEST
RETURNS (
BLB_R BLOB SUB_TYPE 1 SEGMENT SIZE 80)
AS
DECLARE VARIABLE i INTEGER;
declare variable S varchar(10000);
BEGIN
S = '';
i = 0;
WHILE (i < 10000) DO
BEGIN
S = S||'sasas'||i;
i = i + 1;
END
blb_r=S;
SUSPEND;
END
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913733
Leo1121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

А как не плодить?
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913738
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo1121А как не плодить? не делать так:
blb_r = blb_r||'sasas'||i;
тем более в цикле.
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913739
Leo1121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хотел уйти от VARCHAR :)
боюсь выйти за максимум
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913745
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo1121возрастает более 1Gпосле коммита, это место будет задействовано повторно.

Накапливай в варчаре, по мере накопления сливай в блоб. чем меньше конкатенаций блобов, тем лучше.

или сливай в gtt, потом select list (gtt_field,'') from gtt и отдавай наружу уже блоб.
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913746
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913760
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo1121,

как то так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
--CREATE OR ALTER PROCEDURE GET_TEST
EXECUTE BLOCK
RETURNS (
    BLB_R BLOB SUB_TYPE 1 SEGMENT SIZE 80)
AS
  DECLARE PROCEDURE GENERATE_NUM(MAX_NUM INT) RETURNS (I INT, S VARCHAR(1))
  AS
  BEGIN
    i = 0;
    S = '';
    WHILE (i < 10000) DO
    BEGIN
      SUSPEND;
      i = i + 1;
    END
  END
BEGIN
  blb_r = '';
  SELECT LIST(S, 'sasas'||i)
  FROM GENERATE_NUM(10000)
  INTO blb_r;
  SUSPEND;
END



это работает только в трёшке. В 2.5 придётся создать отдельную процедуру GENERATE_NUM
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913799
Leo1121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема понятна.
Всем спасибо.

Попробую через промежуточный varchar, или откажусь от BLOB
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913805
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисэто работает только в трёшке. В 2.5 придётся создать отдельную процедуру GENERATE_NUM
Ага, вот только порядка при LIST никто не гарантирует
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913843
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийАга, вот только порядка при LIST никто не гарантируетЕсли только источник не упорядочен "унутре". Что для процедуры естественно.
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38913844
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

порядок должна гарантировать ХП
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914228
Фотография Секретное имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryШавлюк ЕвгенийАга, вот только порядка при LIST никто не гарантирует Если только источник не упорядочен "унутре" . Что удля процедуры естественно.выделенное документировано ?
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914235
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Секретное имя пользователявыделенное документировано ?
да. Language reference russian.pdf, страница 315, описание функции LIST:
Порядок вывода списка значений не определен.
Если выдачу распарсить в процедуре или EB, то да, результату можно задать какой-то порядок.
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914340
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Секретное имя пользователя,

можно даже проще

Код: sql
1.
2.
SELECT LIST(val, sep)
FROM (SELECT val, sep FROM <source> ORDER BY orderfield)
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914362
Фотография Секретное имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисСекретное имя пользователя,

можно даже проще

Код: sql
1.
2.
SELECT LIST(val, sep)
FROM (SELECT val, sep FROM <source> ORDER BY orderfield)

что проще ?
kdv привел ссылку на доку, где русским по белому сказано, что порядок не определен

сейчас ордер бай "внутри" внезапно упорядочивает результат LIST, но это случайность и может перестать работать, нельзя на это закладываться
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914412
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Секретное имя пользователя,

ты не понял смысл этой фразы. Функция LIST не имеет предложение ORDER BY для упорядочивания результата только и всего. Она соединяет строки в той последовательности в которой читает из источника. Поскольку в общем случае порядок выдачи записей в запросе не определён отсюда эта фраза. Если мы упорядочиваем источник, то записи из него будут читаться упорядоченными.

P.S. посмотри список авторов той доки
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914428
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати если надо, то могу добавить в доку примерчик как сделать записи упорядоченными в LIST
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914661
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисесли надо, то могу добавить в доку примерчик как сделать записи
упорядоченными в LIST
Просто замени фразу "порядок не определён" на "порядок соответствует порядку источника". А
у источника уже написано, что в отсутствии ORDER BY порядок не определён.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914698
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

согласен
...
Рейтинг: 0 / 0
Хранимая процедура c BLOB
    #38914799
Фотография Секретное имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСимонов Денисесли надо, то могу добавить в доку примерчик как сделать записи
упорядоченными в LIST
Просто замени фразу "порядок не определён" на "порядок соответствует порядку источника". А
у источника уже написано, что в отсутствии ORDER BY порядок не определён.
Так будет понятнее
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хранимая процедура c BLOB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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