2016-09-30 10 views
1

Extract Transform Load(ETL)に関する情報を提供するテーブルのLast_Extract_Tsの値を監視するストアドプロシージャを作成しています。今度は、Last_Extract_tsの値が前回のプロシージャの実行時から変更されているかどうかを確認したいが、最後のプロシージャの実行結果を格納する方法を理解できないため、現在のプロシージャで使用できる。ストアドプロシージャを使用してテーブル属性を監視する

以下

は私の手順

create or replace PROCEDURE MONITOR AS 


    v_count    number:=0; 
    v_Last_Extract_Ts VARCHAR2(80) := ''; 
    v_Last_ETL_Run VARCHAR2(80) := ''; 
    BEGIN 

select count(*) into v_count from oms_etl_config where ATTR_NM='last_extract_ts' and process_type='upd' and ATTR_VALUE<=to_char(sys_extract_utc(systimestamp)-5/1440,'YYYY-MM-DD HH24:MI:SS'); 
select Attr_value into v_Last_Extract_Ts from OMS_ETL_CONFIG where PROCESS_TYPE='upd' AND ATTR_NM='last_extract_ts'; 
Select MAX(START_TS) into v_Last_ETL_Run from OMS_ETL_AUDIT; 

dbms_output.put_line(v_count); 
dbms_output.put_line(v_Last_Extract_Ts); 
dbms_output.put_line(v_Last_ETL_Run); 


END; 

である私は、Insert results of a stored procedure into a temporary tableで一時テーブルにストアドプロシージャの結果を格納するようなものに出くわしたExec stored procedure into dynamic temp tableが、私はかなりそれは私のニーズを満たしているかを確認することはできません。

可能なことを達成しようとしているか、別の方法が必要ですか?

ありがとうございます。

P.私はPL/SQLとストアドプロシージャの絶対初心者ですので、私は 私のやり遂げた研究のために私のポストには何の試みもしていません。そのために残念。

+0

Oracle(PL \ SQL)またはSQL Server(T-SQL)?? – Aditya

+0

@AdityaそれはOracle PL-SQLでSQLサーバーではないt SQLはタグを編集できます –

+0

テーブルにトリガを作成し、この実行中に値が変化するかどうかを確認できます。その場合、メッセージを生成することができます – XING

答えて

1

最も簡単な方法は、最後の結果をテーブルに保存することです。表の値に更新するストアドプロシージャで

insert into monitor_results values (NULL, NULL, NULL, NULL); 
commit; 

Create table monitor_results 
( 
    last_run_date   date 
, last_Last_Extract_Ts varchar2(80) 
, last_ETL_Run   varchar2(80) 
, last_count   NUMBER 
); 

の値を初期化:

テーブルを作成...

update monitor_results 
set 
     last_run_date   = SYSDATE 
    , last_Last_Extract_Ts = v_Last_Extract_Ts 
    , last_ETL_Run   = v_Last_ETL_Run 
    , last_count   = v_count 
; 
commit; 
+0

あなたの答えはありがたいですが、データベースに新しいテーブルを作成する権限が与えられていません。私はあなたにアプローチすることができるかどうかを見ることができます、これは私が最初に考えたことですが、それを放棄しました。 –

1

あなたはこのチェックをusiすることができますトリガー:以下を参照してください。

CREATE OR REPLACE TRIGGER reporting_trigger 
    AFTER UPDATE ON <Table> 
    FOR EACH ROW 
BEGIN 
/**Your column which holds the record**/ 
IF :new.a = :old.a THEN 
    raise_application_error(-20001, 'This is a custom error'); 

END IF; 


END; 
+0

私はプロシージャを使用して削除して、代わりにトリガーを使用する必要がありますか? –

+0

はい、ここでは例では、私はレコードを挿入すると言うことができます。次回、同じ値の更新があると、エラーメッセージが表示されます。 – XING

+0

さて、ただ1つの質問です。 ETLが機能しなくなった場合、テーブルにエントリを入れず、Last_Extract_tsが変更されなかった場合には、このトリガはどのように機能しますか?私はそれがテーブルのすべての更新で発生することがわかります –

関連する問題