2011-06-22 7 views
1

oracle.IのDBMS_SCHEDULERに問題がありました。特定のベースのストアド・プロシージャから実行する外部プログラム(oracleが実行されているサーバーにあるperlスクリプト)があります。そのために、DBMS_SCHEDULER.create_programを作成して外部プログラムを実行できることを知りました。私はそれだけでした。問題は、私はoracleで作成されたプログラムオブジェクトを持っていますが、このオブジェクトを実行できません。このオブジェクトを実行するためにこのような何かを試していた:DBMS_SCHEDULER.create_programによって作成された実行オブジェクト

EXECUTE MY_PROGRAM_OBJECT;

しかし、これを行うたびに、オブジェクトMY_PROGRAM_OBJECTは無効です(FYI ... select *をALL_OBJECTSから使用してこのオブジェクトを見ることができます)。これを実行するには他にもいくつかの方法があると思います。残念ながら、私は正式な文書を見つけることはできないようです。実行するためには、私は別の仕事を作成し、そこからそれを指し示す必要があります。そのため、合理的ではありません。

P.S.私はDBMS_SCHEDULERに対して実行権限を持っています。 この点に関するすべてのヘルプは高く評価されます。

時間をとっていただきありがとうございます!

+0

* SELECT * FROM dba_scheduler_job_run_detailsから追加のエラーの詳細を投稿してください。ステータス<> 'SUCCEEDED' ORDER BY LOG_ID DESC; *と表示されている内容を参照してください。 – Harrison

+0

も参照してください。http://forums.oracle.com/ forums/thread.jspa?threadID = 555102 – Harrison

+0

あなたが使ったCREATE_JOBコマンドを投稿できますか? – DCookie

答えて

1

作成したプログラムを使用するジョブを作成する必要があります。スケジュール「INTERVAL_EVERY_DAY」はdbms_scheduler.create_scheduleを介して作成される必要があるであろうことを

exec dbms_scheduler.create_job(
job_name=>'JOB_RUN_MY_PROGRAM', 
program_name=>'PROG_RUN_MY_PROCEDURE', 
schedule_name=>'INTERVAL_EVERY_DAY', 
enabled=>true, 
auto_drop=>false, 
comments=>'This will run my scheduler program'); 

注:ような何か。

手動で実行または停止するには、dbms_scheduler.run_jobおよびdbms_scheduler.stop_jobを使用します。上で作成したばかりのジョブのステータスを表示するには、dba_scheduler_jobsを使用します。

プログラムの作成の根拠としては、一連のジョブを含むより複雑な状況を作成するのに役立ちます。プログラムを指すようにチェーンステップを定義し、チェーンを進める方法に関するルールを定義します(定義された順序でステップを並行または順番に実行します)。

+0

お返事ありがとうございます。しかし、プログラムを一度に実行するのは奇妙なことではありません。スケジューラを作成する必要があります。スケジューラを作成する必要があります。ストアドプロシージャを実行する際に問題を起こします。私はアラートを発生させるプログラムを呼び出します。スケジュールは必要ないが、私の要求に応じて呼び出す必要があります。 – mawia

+0

何らかのスケジュールで何かを実行しない限り、スケジューラは必要ありません。ストアドプロシージャを実行する場合は、executeのように呼び出します。execute my_stored_procedure( 'Some param'); – tbone

+0

私はストアドプロシージャを必要としません。私はストアドプロシージャからシェルスクリプトを実行したいですか?私はOracleからシェルスクリプトを実行できる他の方法はありますか? – mawia

関連する問題