2015-05-17 10 views
1

У меня есть база данных 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?

+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- оцененная-функция /) –

Смежные вопросы