2016-09-30 3 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

오라클 (PL \ SQL) 또는 SQL Server (T-SQL) ?? – Aditya

+0

@Aditya SQL 서버가 아닌 Oracle PL-SQL입니다. 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

이 검사를 할 수 있습니다. 트리거 참조 : 아래 참조 :

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

알겠습니다. 단 하나의 질문입니다. ETL이 작동을 멈 추면 테이블에 항목을 넣지 않고 Last_Extract_ts가 변경되지 않은 경우를 나타내므로이 트리거가 어떻게 작동합니까? 나는 테이블의 모든 업데이 트에서 화재를 볼 수 있습니다 –

관련 문제