2015-05-17 65 views
1

我有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执行火鸟程序?

+0

您应该总是追加异常跟踪(如果有的话) –

+0

您无法从存储过程中“选择”。您需要使用返回结果集的函数。或者你需要一个处理游标的过程调用(不知道JOOQ,所以我不能告诉你如何在那里执行 - 在普通的JDBC中非常简单) –

回答

1

3小时后通过输入随机命令它的作品。

Result result = create.selectFrom(Routines.findSchemesWithInfo(7, 22)).fetch(); 

System.out.println(result); 
+---------+----------+---------------+--------+-----------+-----------+------------+-------+ 
|SCHEME_ID|START_CITY|END_CITY  |DISTANCE|TRAVEL_TIME|COMFORT_LVL|HAND_LUGGAGE|LUGGAGE| 
+---------+----------+---------------+--------+-----------+-----------+------------+-------+ 
|  1|Київ  |Миколаїв  |  189|  193|Преміум |  {null}| {null}| 
|  2|Київ  |Кіровоград  |  189|  193|Преміум |  {null}| {null}| 
|  3|Київ  |Кіровоград  |  189|  193|Преміум |  {null}| {null}| 
|  4|Київ  |Дніпропетровськ|  189|  193|Преміум |  {null}| {null}| 
+---------+----------+---------------+--------+-----------+-----------+------------+-------+ 
+0

这确实如此。对于这个问题的未来访问者,[jOOQ手册的相关页面是关于表值函数的页面](http://www.jooq.org/doc/latest/manual/sql-building/table-expressions/table-值函数/) –