所以我有一个Oracle数据库,我使用CX_ORACLE包从我的Python模块连接到该数据库 只要我进行同步调用,这种方法就可以正常工作,但我试图找出一种方法可以使异步,因为我在Oracle上的存储过程可能需要花费太多时间,而且我与Oracle的连接超时。
有没有办法可以从我的Python模块触发我的存储过程并关闭连接而不终止存储过程触发的实例?
答案 0 :(得分:3)
你问的方式 - 没有。当你断开连接时,oracle会杀死你的会话(或至少试图杀死)。但是你可以创造一份工作。 Job是由oracle实例管理的对象。它有一个用于运行的计划。创建作业的最简单示例,该作业将运行一次存储过程:
begin
dbms_scheduler.create_job(
job_name => 'My job',
job_type => 'STORED_PROCEDURE',
job_action => 'YOUR_SCHEMA.YOUR_PACKAGE.YOUR_PROCEDURE',
start_date => 'desired date to start',
repeat_interval => 'FREQ=DAILY;INTERVAL=1', /* every day */
end_date => 'desired date to stop',
comments => 'I will run it from python');
end;
仅在离开start_date
,repeat_interval
和end_date
null时运行您的程序:
begin
dbms_scheduler.create_job(
job_name => 'My job',
job_type => 'STORED_PROCEDURE',
job_action => 'YOUR_SCHEMA.YOUR_PACKAGE.YOUR_PROCEDURE',
comments => 'I will run it from python');
end;
Oracle Scheduler是一个非常复杂和强大的工具。您可以使用参数,匿名块,创建复杂的计划等运行过程。要了解更多信息,请参阅文档:Scheduler,DBMS_SCHEDULER。