Scala Play anorm framework Oracle 11 хранимая процедура

У меня есть 2 хранимые процедуры Oracle, одна для набора глобальных переменных и одна для получения данных в виде sys_refcursor. В PLSQL Developer я использую это следующим образом:

begin 
  PKG_ARM_STRUCT.set_context_variables(37159,3,15,20181201,20171201,9,5,300,null); 
end;

select pkg_arm_data.f_get_data from dual

Это работает нормально, и f_get_data возвращает мне sys_refcursor с данными.

Теперь я хочу выполнить его в платформе Play следующим образом:

def getSliceTabData = db.withConnection { implicit connection =>

val rowParser: RowParser[Map[String,Any]] =
  SqlParser.folder(Map.empty[String, Any]) { (map, value, meta) =>
    Right(map + (meta.column.qualified -> value))
  }

val rContext : SqlQueryResult =  SQL("EXEC PKG_ARM_STRUCT.set_context_variables(37159,3,15,20181201,20171201,9,5,300,null)")
    .executeQuery()

    val parsedRes:  List[Map[String, Any]] = SQL("select pkg_arm_data.f_get_data from dual").as(rowParser.*)
  }

Из журнала базы данных я вижу, что pkg_arm_data.f_get_data вызывается правильно, и эта процедура не видит глобальные переменные, которые должны быть установлены set_context_variables.

Код процедуры set_context_variables (в пакете):

procedure set_context_variables(
                                p_user_id   in number   default null, 
                                p_user_role in number   default null,
                                p_budget    in number   default 15,   
                                p_ddate     in number   default null, 
                                p_appg_date in number   default null, 
                                p_book      in number   default null, 
                                p_tab       in number   default null, 
                                p_slice     in number   default null, 
                                p_pok       in number   default null
                               ) is    
begin
 MSK_ANALYTICS.Set_Curr_Date_Context(s_date => TO_CHAR(TO_DATE(TO_CHAR(p_ddate),'yyyymmdd'),'dd.mm.yyyy'));
 DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT','s_date_context',TO_CHAR(TO_DATE(TO_CHAR(p_ddate),'yyyymmdd'),'dd.mm.yyyy'));

 g_user_id   := p_user_id;
 g_ddate     := p_ddate;
 g_appg_date := p_appg_date;
 g_book_id   := p_book;
 g_slice_id  := p_slice;
 g_tab_id    := p_tab;
 g_pok_id    := p_pok;
 g_budget_id := p_budget;

 if p_user_role != 0 then
  g_user_role := p_user_role;
 else
  g_user_role := pkg_common.f_get_user_adm_level(p_user_id => p_user_id);
 end if;
end;

0 ответов

Другие вопросы по тегам