У меня есть база данных firebird и создайте проект java, который его использует. Используя GenerationTool, я создаю структуру базы данных. Когда я попытался выполнить оператор вроде этого, все работает нормально.Выполнение хранимой процедуры Firebird с использованием JOOQ
Result<Record1<Integer>> toStations = create.select(STATIONS.STATION_ID).
from(STATIONS).
where(STATIONS.CITY_ID.equal(create.select(CITIES.CITY_ID).
from(CITIES).
where(CITIES.CITY_NAME.equal(to)))).fetch();
Но я не могу выполнить хранимую процедуру. Я хранимая процедура:
create or alter procedure Find_Schemes (
FROM_STATION ID not null,
TO_STATION ID not null)
returns (
SCHEME_ID ID)
as
begin
for select SCHEME_ID
from SCHEMES S
where PATH_ID = (select PATH_ID
from PATHES P
where PATH_ID = S.PATH_ID and
(select LIST_POS
from PATHES_STATIONS
where PATH_ID = P.PATH_ID and
STATION_ID = :FROM_STATION) < (select LIST_POS
from PATHES_STATIONS
where PATH_ID = P.PATH_ID and
STATION_ID = :TO_STATION))
into :SCHEME_ID
do
begin
suspend;
end
end
^
Я попытался выполнить его как этот
Result result = (Result) Routines.findSchemes(7,22);
System.out.println(result);
, но у меня есть исключение, чем я не могу бросить это (результат);
Затем я попытался это сделать, но это не работает, потому findSchemes нужны параметры String, но в моей процедуре только параметры Integer:
Result result = create.select(FIND_SCHEMES(7,22));
Как я могу выполнить Firebird процедуру с помощью JOOQ?
Вы всегда должны добавлять трассировку исключения, если она есть –
Вы не можете «выбрать» из хранимой процедуры. Вам нужно использовать функцию, которая возвращает набор результатов. Или вам нужен вызов процедуры, который обрабатывает курсоры (не знаю JOOQ, поэтому я не могу сказать вам, как это сделать там - будет довольно простым в простом JDBC) –