java Вызов хранимой процедуры c несколькими begin в Oracle

Рейтинг: -1Ответов: 2Опубликовано: 11.08.2023

Есть процедура с несколькими блоками begin ... end;
не могу сообразить как это чудо запустить, подскажите, пожалуйста свои идеи.

Пример кода.

declare
    v_sid        number(10);
    v_serial     number(10);
    v_table_name varchar2(64);
    v_start_date date;
    v_slog_id    number(10);
  begin
    begin 
      select ****
      where ****
    exception 
      ****
    end;
        
    begin     
      select 
        *** as v_sid,
        *** as v_serial
      into v_sid, v_serial
      from (
          select ***
          from ***
          where *** || v_table_name || *** >= v_start_date
        )
      where ***
    exception 
      *** 'v_slog_id = ' || v_slog_id || chr(13) ||', v_table_name = ' || v_table_name || chr(13) ||', v_start_date = ' || to_char(v_start_date,'dd.mm.yyyy hh24:mi:ss') || chr(13) );
    end;
   
    begin 
        *** ' || v_sid || ', serial: ' || v_serial ||');
    exception 
        ***
    end;
  end;

Ответы

▲ 1Принят

Вложенные begin.. end на вызов никак не влияют. У процедуры должно быть описано имя и набор параметров - вот они вам и нужны. Cам вызов тривиален и описан в официальных примерах для JDBC.

▲ 1

Можно вызвать произвольный PL/SQL-блок, сколь угодно сложный, не создавая для него процедуру в БД.
Просто передайте этот блок (как строку) в процедуру prepareCall.
Дальше как обычно - определите параметры: входные (setString,...), выходные (registerOutParameter) и вызовите execute