Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Extração
- --##--TABLE_EXTRACT--##--
- PASSOS DO ALGORITMO: EXTRAÇÃO INCREMENTAL APARTIR DE TABELAS
- 1. Limpar a tabela destino na DSA
- 2. Obter a data/hora do último registo extraido da tabela fonte (T_INFO_EXTRACTIONS)
- 1ª EXTRAÇÃO
- 3. Obter data do registo mais recente na tabela fonte
- 4. Extrair TODOS os registos da tabela fonte para a tabela destino
- 5. Atualizar a tabela T_INFO_EXTRACTIONS
- 2ª EXTRAÇÃO E SEGUINTES
- 3. Obter a data do registo mais recente da tabela fonte
- 4. Extrair APENAS os registos novos ou modificados da tabela fonte para a tabela destino
- 5. Extrair a tabela T_INFO_EXTRACTIONS
- -----------------------------------------
- PASSOS EM CÓDIGO:
- 1. Limpar a tabela destino na DSA
- v_sql := 'DELETE FROM ' || p_dsa_table;
- EXECUTE IMMEDIATE v_sql;
- 2. Obter a data/hora do último registo extraido da tabela fonte (T_INFO_EXTRACTIONS)
- v_sql:='SELECT last_timestamp FROM t_info_extractions WHERE UPPER(source_table_name)='''||UPPER(p_source_table)||'''';
- EXECUTE IMMEDIATE v_sql INTO v_start_date;
- --#--1ª EXTRAÇÃO--#--
- 3. Obter data do registo mais recente na tabela fonte
- v_sql:= 'SELECT MAX(src_last_changed) FROM ' || p_source_table;
- pck_log.write_log(v_sql);
- EXECUTE IMMEDIATE v_sql INTO v_end_date;
- 4. Extrair TODOS os registos da tabela fonte para a tabela destino
- v_sql := 'INSERT INTO ' || p_dsa_table || ' (' || p_attributes_dest ||') SELECT ' || p_attributes_src|| ' FROM ' || p_source_table ||'
- WHERE src_last_changed <= :1';
- pck_log.write_log(v_sql);
- EXECUTE IMMEDIATE v_sql USING v_end_date;
- 5. Atualizar a tabela T_INFO_EXTRACTIONS
- v_sql := 'UPDATE t_info_extractions SET LAST_TIMESTAMP = :1 WHERE UPPER(SOURCE_TABLE_NAME)=''' || UPPER(p_source_table) || '''';
- pck_log.write_log(v_sql);
- EXECUTE IMMEDIATE v_sql USING v_end_date;
- --#--2ª EXTRAÇÃO E SEGUINTES--#-
- 3. Obter a data do registo mais recente da tabela fonte
- v_sql:= 'SELECT MAX(src_last_changed) FROM ' || p_source_table || ' WHERE src_last_changed > :1';
- pck_log.write_log(v_sql);
- EXECUTE IMMEDIATE v_sql INTO v_end_date USING v_start_date;
- 4. Extrair APENAS os registos novos ou modificados da tabela fonte para a tabela destino
- v_sql := 'INSERT INTO ' || p_dsa_table || ' (' || p_attributes_dest ||') SELECT ' || p_attributes_src || ' FROM ' || p_source_table ||'
- WHERE src_last_changed BETWEEN :1 AND :2';
- pck_log.write_log(v_sql);
- EXECUTE IMMEDIATE v_sql USING v_start_date, v_end_date;
- 5. Extrair a tabela T_INFO_EXTRACTIONS
- v_sql := 'UPDATE t_info_extractions SET LAST_TIMESTAMP = :1 WHERE UPPER(SOURCE_TABLE_NAME)=''' || UPPER(p_source_table) || '''';
- pck_log.write_log(v_sql);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement