2017-12-19 8 views
0

私はCX_ORACLEパッケージを使ってPythonモジュールから接続するOracleデータベースを持っています。
同期呼び出しを行っている間は正常に動作しますが、Oracleのストアドプロシージャが時間がかかり、Oracleへの接続がタイムアウトする可能性があるため、非同期にすることができます。Oracle Databaseでストアド・プロシージャを非同期で起動できますか?

私のPythonモジュールから私のStored Procをトリガーし、トリガーされたStored Procのインスタンスを終了せずに接続を閉じる方法はありますか?

答えて

3

あなたが尋ねているところで - いいえ。切断すると、oracleはセッションを終了します(または少なくともkillを試みます)。しかし、あなたは仕事を作ることができます。ジョブは、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ヌルのままに一度だけ、あなたの手順を実行するには:一度ストアドプロシージャを実行する、ジョブを作成するための最も簡単な例

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のドキュメントを参照してください。

+0

応答@ドミトリーありがとうございます。 しかし、私はそれを呼び出すPythonコードに値を返すために私のStored Procが必要でした。私はこの場合には不可能と仮定していますか? –

+0

@SakshamArora直接 - いいえ。しかし、戻り値をテーブルに格納することはできます。スクリプトを実行し、識別子を渡し(異なるプロシージャの実行を識別する必要がある場合)、プロシージャを実行します。プロシージャに識別子を使用して結果を保存するコードを追加し、次に選択を行います。 – Dmitry

関連する問題