Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. Extração
  2.  
  3. --##--TABLE_EXTRACT--##--
  4.  
  5. PASSOS DO ALGORITMO: EXTRAÇÃO INCREMENTAL APARTIR DE TABELAS
  6.  
  7. 1. Limpar a tabela destino na DSA
  8. 2. Obter a data/hora do último registo extraido da tabela fonte (T_INFO_EXTRACTIONS)
  9.  
  10. 1ª EXTRAÇÃO
  11.  
  12. 3. Obter data do registo mais recente na tabela fonte
  13. 4. Extrair TODOS os registos da tabela fonte para a tabela destino
  14. 5. Atualizar a tabela T_INFO_EXTRACTIONS
  15.  
  16. 2ª EXTRAÇÃO E SEGUINTES
  17.  
  18. 3. Obter a data do registo mais recente da tabela fonte
  19. 4. Extrair APENAS os registos novos ou modificados da tabela fonte para a tabela destino
  20. 5. Extrair a tabela T_INFO_EXTRACTIONS
  21.  
  22.  
  23. -----------------------------------------
  24.  
  25. PASSOS EM CÓDIGO:
  26.  
  27. 1. Limpar a tabela destino na DSA
  28.  
  29. v_sql := 'DELETE FROM ' || p_dsa_table;
  30. EXECUTE IMMEDIATE v_sql;
  31.  
  32. 2. Obter a data/hora do último registo extraido da tabela fonte (T_INFO_EXTRACTIONS)
  33.  
  34. v_sql:='SELECT last_timestamp FROM t_info_extractions WHERE UPPER(source_table_name)='''||UPPER(p_source_table)||'''';
  35. EXECUTE IMMEDIATE v_sql INTO v_start_date;
  36.  
  37.  
  38.  
  39.  
  40. --#--1ª EXTRAÇÃO--#--
  41.  
  42. 3. Obter data do registo mais recente na tabela fonte
  43.  
  44. v_sql:= 'SELECT MAX(src_last_changed) FROM ' || p_source_table;
  45.  
  46. pck_log.write_log(v_sql);
  47. EXECUTE IMMEDIATE v_sql INTO v_end_date;
  48.  
  49. 4. Extrair TODOS os registos da tabela fonte para a tabela destino
  50.  
  51. v_sql := 'INSERT INTO ' || p_dsa_table || ' (' || p_attributes_dest ||') SELECT ' || p_attributes_src|| ' FROM ' || p_source_table ||'
  52. WHERE src_last_changed <= :1';
  53.  
  54. pck_log.write_log(v_sql);
  55. EXECUTE IMMEDIATE v_sql USING v_end_date;
  56.  
  57.  
  58. 5. Atualizar a tabela T_INFO_EXTRACTIONS
  59.  
  60. v_sql := 'UPDATE t_info_extractions SET LAST_TIMESTAMP = :1 WHERE UPPER(SOURCE_TABLE_NAME)=''' || UPPER(p_source_table) || '''';
  61.  
  62. pck_log.write_log(v_sql);
  63. EXECUTE IMMEDIATE v_sql USING v_end_date;
  64.  
  65.  
  66. --#--2ª EXTRAÇÃO E SEGUINTES--#-
  67.  
  68.  
  69. 3. Obter a data do registo mais recente da tabela fonte
  70.  
  71. v_sql:= 'SELECT MAX(src_last_changed) FROM ' || p_source_table || ' WHERE src_last_changed > :1';
  72. pck_log.write_log(v_sql);
  73. EXECUTE IMMEDIATE v_sql INTO v_end_date USING v_start_date;
  74.  
  75.  
  76. 4. Extrair APENAS os registos novos ou modificados da tabela fonte para a tabela destino
  77.  
  78. v_sql := 'INSERT INTO ' || p_dsa_table || ' (' || p_attributes_dest ||') SELECT ' || p_attributes_src || ' FROM ' || p_source_table ||'
  79. WHERE src_last_changed BETWEEN :1 AND :2';
  80.  
  81. pck_log.write_log(v_sql);
  82. EXECUTE IMMEDIATE v_sql USING v_start_date, v_end_date;
  83.  
  84.  
  85. 5. Extrair a tabela T_INFO_EXTRACTIONS
  86.  
  87. v_sql := 'UPDATE t_info_extractions SET LAST_TIMESTAMP = :1 WHERE UPPER(SOURCE_TABLE_NAME)=''' || UPPER(p_source_table) || '''';
  88.  
  89. pck_log.write_log(v_sql);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement