我正在使用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。是的,我可以简单地更改服务器超时的设置,但我不能,因为服务器不是我的,我不能直接配置它。