我可以异步触发Oracle数据库中的存储过程吗?

问题描述 投票:0回答:1

所以我有一个Oracle数据库,我使用CX_ORACLE包从我的Python模块连接到该数据库。 只要我正在进行同步调用,这样就可以正常工作但是我试图找出一种方法可以使这种异步,因为我在Oracle上的存储过程可能需要太多时间而且我与Oracle的连接超时。

有没有办法可以从我的Python模块触发我的存储过程并关闭连接而不终止存储过程触发的实例?

python oracle stored-procedures
1个回答
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_daterepeat_intervalend_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是一个非常复杂和强大的工具。您可以使用参数,匿名块,创建复杂的计划等运行过程。要了解更多信息,请参阅文档:SchedulerDBMS_SCHEDULER

© www.soinside.com 2019 - 2024. All rights reserved.