SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » clumplet too long (FB4)
clumplet too long (FB4) [сообщение #2581] Sun, 18 June 2023 07:33 Переход к следующему сообщению
CyberMax в настоящее время не в онлайне  CyberMax
Сообщений: 8
Зарегистрирован: June 2023
Junior Member
FB 4.0.3.2940.
Есть ХП, при выполнении которой получаю вот такое сообщение:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long (44319).

Попытки сделать воспроизводимый пример через системные таблицы приводят к тому, что сообщение пропадает и ХП выдает данные как надо.
Но есть две вещи, которые влияют на сообщение:
1. :AMORT_CALC = (SELECT SUM(LC.AMOUNT) FROM BAT$AMORT_CREDIT$LINE LC WHERE LC.ID_BT_ABONENT = :ID_BT);
Эта строка работает в цикле, а :AMORT_CALC - выходной параметр. Если прописать :AMORT_CALC = 5, то сообщения про clumplet too long нет.
2. В Конце ХП вызывается исключение:
EXCEPTION EXC$CHECK_DATA;
Если его закомментировать, то сообщения про clumplet too long тоже нет.

Вопрос к разработчикам - есть ли возможность внести изменения в FB 4, чтобы это сообщение про clumplet too long было более подробным?
Например, добавить размер буфера, а не только clumplet? Или добавить стек вызовов, или какую-то еще информацию с подробностями?
Или подсказать, что может влиять на появление этого сообщения?
Re: clumplet too long (FB4) [сообщение #2717 является ответом на сообщение #2581] Mon, 10 July 2023 08:24 Переход к предыдущему сообщению
CyberMax в настоящее время не в онлайне  CyberMax
Сообщений: 8
Зарегистрирован: June 2023
Junior Member
Нашел, как воспроизводится как минимум один случай.

1. Создаем две таблицы:
CREATE TABLE TABLE_DETAIL (
    ID  INTEGER NOT NULL
);

CREATE TABLE TABLE_MASTER (
    ID  INTEGER NOT NULL
);
2. Заполняем данными:
INSERT INTO TABLE_DETAIL (ID)
                  VALUES (3);
INSERT INTO TABLE_DETAIL (ID)
                  VALUES (3);

INSERT INTO TABLE_MASTER (ID)
                  VALUES (1);
INSERT INTO TABLE_MASTER (ID)
                  VALUES (2);
INSERT INTO TABLE_MASTER (ID)
                  VALUES (3);
3. Теперь выполняем запрос:
SELECT
    (SELECT 1 FROM TABLE_DETAIL D WHERE D.ID = M.ID)
FROM
    TABLE_MASTER M
ORDER BY
    M.ID
На FB 4.0.2.2770 получаю:
Цитата:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long (42527).

На FB 4.0.3.2940 получаю:
Цитата:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Invalid clumplet buffer structure: buffer end before end of clumplet - no length component (1).

Теперь, если удалить хотя бы одну строку (DELETE FROM TABLE_MASTER WHERE ID = 1), получаем корректное сообщение:
Цитата:
multiple rows in singleton select.
multiple rows in singleton select.
Предыдущая тема: Неизвестная time zone и ucal_open [ICU]
Следующая тема: RDB$ERROR и русский текст в EXECUTE STATEMENT
Переход к форуму:
  


Текущее время: Fri May 03 16:46:16 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01043 секунд