使用MyBatis提交作业将结构作为参数传递给被调用的过程

时间:2014-07-15 10:22:51

标签: java oracle stored-procedures mybatis jobs

我正在使用MyBatis为我的java项目执行查询。

我必须调用一个包程序,现在我这样做:

{
    call MY_PACKAGE.very_long_procedure(
        #{in_custom_type, mode=IN, jdbcType=STRUCT, jdbcTypeName=CUSTOM_TYPE}
    )
}

CUSTOM_TYPE的定义如下:

create or replace type tp_calcolo as object (
    id_type              NUMBER(38,0)
    name_tt              VARCHAR2(200 CHAR)
);

我可以打电话给它,但它确实有效。

点击按钮即可调用它。问题是它需要花费很多时间才能结束,而我的服务器超时设置为120秒,因此在2分钟后,由于请求超时,我收到异常。

我想要做的是将我的过程调用更改为创建作业,以便它作为一个线程执行,并在创建作业后立即完成请求。

这就是我应该创造这项工作的方式:

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    (
      job        => X
     ,what       => 'DECLARE 
  in_custom_type    CUSTOM_TYPE
BEGIN

  in_custom_type := ?; --what to write here? how to insert custom type?

  MY_PACKAGE.very_long_procedure(
    in_custom_type
  ) 
  COMMIT; 
END;'
     ,next_date  => to_date('07/15/2014 11.37.08','mm/dd/yyyy hh24:mi:ss')
     ,no_parse   => FALSE
    );
:JobNumber := to_char(X);
END;

现在,如果我用?替换custom_type('12', 'PACKAGE CALL'),它可以正常工作 ,因为我正在创建一个新对象。但是如果将对象作为结构传递给MyBatis呢?

我如何将其传递给工作?

P.S。是的,我可以简单地更改服务器超时的设置,但我不能,因为服务器不是我的,我不能直接配置它。

0 个答案:

没有答案