【发布时间】:2015-07-28 21:43:25
【问题描述】:
我有 firebird 数据库,并创建使用它的 java 项目。通过使用 GenerationTool 我生成数据库结构。当我尝试执行这样的语句时,一切正常。
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 执行 Firebird 程序?
【问题讨论】:
-
如果有异常跟踪,您应该始终附加异常跟踪
-
您不能在存储过程中
select。您需要使用返回结果集的函数。或者你需要一个处理游标的过程调用(不知道 JOOQ,所以我不能告诉你如何在那里做——在普通的 JDBC 中会很简单)
标签: java sql database stored-procedures jooq