我有firebird数据库,并创建了使用它的java项目。通过使用GenerationTool,我生成数据库结构。当我尝试像这样的执行语句一切正常。使用JOOQ执行Firebird存储过程
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需要字符串参数,但在我的程序只整型参数:
Result result = create.select(FIND_SCHEMES(7,22));
我如何使用JOOQ执行火鸟程序?
您应该总是追加异常跟踪(如果有的话) –
您无法从存储过程中“选择”。您需要使用返回结果集的函数。或者你需要一个处理游标的过程调用(不知道JOOQ,所以我不能告诉你如何在那里执行 - 在普通的JDBC中非常简单) –