У меня есть Java-приложение на основе Spring, которое вставляет огромный набор записей в транзакцию с бэкэндом HSQLDB dbms. Чтобы уменьшить количество циклов обработки для генерации первичных ключей для вставляемых записей, у меня была идея создать хранимую процедуру, которая генерирует первичные ключи, которые будут использоваться в качестве идентификаторов перед выполнением вставки. Поэтому я создал хранимую процедуру со следующим кодом:
CREATE PROCEDURE GET_GENERATED_PKS_SEQ_VALUES(
IN NUMBEROFIDS INTEGER,
OUT GENERATEDID NUMERIC ARRAY)
BEGIN ATOMIC
DECLARE GENID NUMERIC ARRAY;
DECLARE COUNTER INTEGER DEFAULT 1;
WHILE COUNTER <= NUMBEROFIDS DO
SET GENID[COUNTER] = NEXT VALUE FOR GENERATE_PKS_SEQ;
END WHILE;
SET GENERATEDID = GENID;
END;
Существует последовательность GENERATE_PKS_SEQ, которая уже существует для генерации уникальных идентификаторов для вставляемых записей. Эта хранимая процедура ожидает числового ввода (NUMBEROFIDS) для определения количества ключей, которые будут сгенерированы.
Если я выполню этот оператор для СОЗДАНИЯ хранимой процедуры в менеджере баз данных HSQLDB (приложение Swing), все будет нормально. То есть при выполнении оператора ошибки не возникает.
После создания хранимой процедуры я пытаюсь получить к ней доступ, чтобы проверить вывод. В общем, я выполняю следующий commnand в менеджере баз данных HSQLDB:
call GET_GENERATED_PKS_SEQ_VALUES(10);
Так что я просто хочу создать 10 первичных ключей, используя упомянутую последовательность. Результатом оператора является следующее сообщение об ошибке:
введите описание изображения здесь
Я не знаю, почему произошла ошибка разрешения на выполнение хранимой процедуры. Я создал хранимую процедуру с той же учетной записью пользователя, которая вызывала процедуру с указанным параметром. Версия СУБД HSQL - hsqldb-2.4.0. Кто-нибудь знает о моей ошибке? Что не так?