| Начало » Использование СУБД » Firebird, HQbird, InterBase » clumplet too long (FB4) Переход к форуму:
	| 
		
			| clumplet too long (FB4) [сообщение #2581] | Sun, 18 June 2023 07:33  |  
			| 
				
				
					|  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 Сообщений: 8
 Зарегистрирован: June 2023
 | Junior Member |  |  |  
	| Нашел, как воспроизводится как минимум один случай. 
 1. Создаем две таблицы:
 
 2. Заполняем данными:CREATE TABLE TABLE_DETAIL (
    ID  INTEGER NOT NULL
);
CREATE TABLE TABLE_MASTER (
    ID  INTEGER NOT NULL
);
 3. Теперь выполняем запрос: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);
 На FB 4.0.2.2770 получаю:SELECT
    (SELECT 1 FROM TABLE_DETAIL D WHERE D.ID = M.ID)
FROM
    TABLE_MASTER M
ORDER BY
    M.IDЦитата:
 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.
 |  
	|  |  | 
 
 
 Текущее время: Fri Oct 31 20:30:52 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01121 секунд |