2016-11-08 1 views
1

を失敗して、スケジュールされたジョブは、テーブルののOracle DBMSスケジューラのジョブが、私は、OracleのDBMSスケジューラで今の仕事は、下記のエラーで実行されている儀式を、以下の作業を予定している

begin 
    DBMS_SCHEDULER.CREATE_JOB (
     job_name    => 'KEEP_STATS_DBNEW4', 
     job_type    => 'PLSQL_BLOCK', 
     job_action   => 'begin insert into my_log_table2 (MUSER,MCNT) (select osuser, count(osuser) as active_conn_count from v$session group by osuser order by active_conn_count desc);commit;end;', 
     start_date   => timestamp '2016-11-08 12:40:00', 
     repeat_interval  => 'FREQ=MINUTELY;INTERVAL=10;', 
     enabled    => TRUE); 
end; 
/

構造があるさ: -

テーブルの下

SELECT * FROM DBA_SCHEDULER_JOB_RUN_DETAILS where job_name like '%KEEP_STATS_DBNEW4%' 

に記録され

CREATE TABLE my_log_table2 
(
MUSER varchar(255), 
MCNT varchar(255), 
MDATE TIMESTAMP(6) 
); 

エラーがスタックトレースです

ORA-06550: line 1, column 878: 
PL/SQL: ORA-00907: missing right parenthesis 
ORA-06550: line 1, column 756: 
PL/SQL: SQL Statement ignored 

答えて

1

これはスケジュールどおりではありません。送信している匿名PL/SQLブロック内のinsert文は無効です。あなたは(再フォーマット)があります。

begin 
    insert into my_log_table2 (MUSER,MCNT) 
    (
    select osuser, count(osuser) as active_conn_count 
    from v$session 
    group by osuser 
    order by active_conn_count desc 
); 
    commit; 
end; 

しかしinsert ... selectは、クエリ部分を括弧で囲む必要はありません。それだけで次のようになります。

begin 
    insert into my_log_table2 (MUSER,MCNT) 
    select osuser, count(osuser) as active_conn_count 
    from v$session 
    group by osuser 
    order by active_conn_count desc; 
    commit; 
end; 

... order byはおそらく有益な何もしていないが - それは、データが、後に取得される方法に影響しません。

そして、あなたが出て、そのログテーブルをクリアしていない限り、どこかが示されていない、またはすでにこれを自動的にやってトリガーを持って、SYSDATEに設定した日付の列を追加すると、おそらく有用であろう。あなたはその列MDATEと呼ばれるならば、あなたの仕事のようなものを行うことができます:あなたが喜ばせるために、あなたのタイムリーなアドバイス要求の多くは、私はまた、日付の列を追加する方法を示し

begin 
    insert into my_log_table2 (MDATE, MUSER, MCNT) 
    select sysdate, osuser, count(*) 
    from v$session 
    group by osuser; 
    commit; 
end; 
+0

おかげで、私はテーブルに意味私はではなく、それを追加してい上記のpl/sqlブロックには、タイムスタンプとともに接続名と接続数が格納されるたびに – user1906154

+0

@ user1906154というように追加する必要があります。新しい列名を挿入列に含めるだけですsysdateを選択リストに追加します。それを示すように更新されました。 (これはタイムスタンプではなく日付カラムを持っていることを前提としています。余分な精度は必要ないからです。タイムスタンプカラムを持っていれば、 'sysdate'の代わりに' systimestamp'を使うことができます。 –

+0

@Alaex pooleありがとう、私はテーブルの作成ステートメントでMDATE DATEとして日付の列を作っている – user1906154

関連する問題