Para obter melhor desempenho, utilize a técnica de cursor paralelo ou recupere dados em tabelas internas usando Select .... FOR all entries....
Saudações
Naveen Gupta
Avalados por :
Olá,
Alguém pode me ajudar com loops aninhados? É urgente...
O código é o seguinte..........
OOP AT gt_indata INTO gs_indata.
Obter valores de período do cabeçalho
IF ld_first_time = gc_J.
ld_first_time = gc_N.
Dividir cabeçalho de entrada em estrutura de período
FIELD-SYMBOLS: <lfs_hex> TYPE x,
<lfs_char> TYPE c.
ATRIBUIR gc_tab A <lfs_hex>.
ATRIBUIR <lfs_hex> A <lfs_char> CASTING.
Realizar split1.
LIMPAR: gs_split_1.
DIVIDIR gs_indata AT <lfs_char> EM
gs_split_1-head_1
gs_split_1-head_2
gs_split_1-head_3
gs_split_1-head_4
*Período 1 a 10
gs_split_1-per_1 gs_split_1-per_2 gs_split_1-per_3 gs_split_1-per_4
gs_split_1-per_5 gs_split_1-per_6 gs_split_1-per_7 gs_split_1-per_8
gs_split_1-per_9 gs_split_1-per_10
*Período 11 a 20
gs_split_1-per_11 gs_split_1-per_12 gs_split_1-per_13 gs_split_1-per_14
gs_split_1-per_15 gs_split_1-per_16 gs_split_1-per_17 gs_split_1-per_18
gs_split_1-per_19 gs_split_1-per_20
*Período 21 a 30
gs_split_1-per_21 gs_split_1-per_22 gs_split_1-per_23 gs_split_1-per_24
gs_split_1-per_25 gs_split_1-per_26 gs_split_1-per_27 gs_split_1-per_28
gs_split_1-per_29 gs_split_1-per_30
*Período 31 a 40
gs_split_1-per_31 gs_split_1-per_32 gs_split_1-per_33 gs_split_1-per_34
gs_split_1-per_35 gs_split_1-per_36 gs_split_1-per_37 gs_split_1-per_38
gs_split_1-per_39 gs_split_1-per_40
*Período 41 a 50
gs_split_1-per_41 gs_split_1-per_42 gs_split_1-per_43 gs_split_1-per_44
gs_split_1-per_45 gs_split_1-per_46 gs_split_1-per_47 gs_split_1-per_48
gs_split_1-per_49 gs_split_1-per_50
*Período 51 a 55
gs_split_1-per_51 gs_split_1-per_52 gs_split_1-per_53 gs_split_1-per_54
gs_split_1-per_55.
*Criar tabela interna com todos os períodos do cabeçalho do arquivo de entrada
LIMPAR ld_tabix.
Realizar 56 vezes Variando
ENQUANTO w_tabix LT 56
gs_period-per DE gs_split_1-per_1 A gs_split_1-per_2.
SOMAR 1 A ld_tabix.
*Interrupção no valor END no arquivo
SE gs_period-per = gc_END.
SAIR.
FIM-SE.
ADICIONAR gs_period A gt_period.
FIM-ENQUANTO.
Enddo.
*Converter tipo de data e período para data real
LOOP AT gt_period INTO gs_period.
SEGUNDO gs_period-per(1).
QUANDO gc_W.
Semana
Para obter melhor desempenho, utilize a técnica de cursor paralelo ou recupere dados em tabelas internas usando Select .... FOR all entries....
Saudações
Naveen Gupta
Não é possível evitar loops aninhados, pois muitas vezes é necessário comparar tabelas internas.
1. Uma tabela deve ser a tabela externa e deve ser processada completamente.
Para cada linha da tabela externa:
Não é necessário processar uma tabela interna completa.
Mas apenas uma linha da tabela interna, depois usar 'READ ... BINARY SEARCH' e ORDENAR essa tabela uma vez fora da tabela externa.
Ou algumas poucas linhas da tabela interna, depois usar 'READ BINARY SEARCH' e 'LOOP ... FROM INDEX' com uma condição de saída, o que é muito importante.
Leia este blog, especialmente a última seção:
/people/siegfried.boes/blog/2007/09/12/runtimes-of-reads-and-loops-on-internal-tables
Siegfried
Olá
Você pode usar a instrução de leitura "read statement" com busca binária em vez de usar loops aninhados em algumas partes do seu programa. Mas não se esqueça de ordenar a tabela que está lendo antes de lê-la.
Outra coisa, dentro do loop você usou "select single *". Mas você pode usar "select" com os campos necessários fora do loop em uma tabela interna e, em seguida, ler essa tabela interna dentro do loop.
Recompensa se funcionar.
Obrigado
Siva Kumar
Não é possível evitar loops aninhados, pois muitas vezes é necessário comparar tabelas internas.
1. Uma tabela deve ser a externa e processada integralmente.
Para cada linha da tabela externa:
Não é necessário processar a tabela interna completa.
Apenas uma linha da tabela interna deve ser processada, em seguida, usar 'READ ... BINARY SEARCH' e ORDENAR essa tabela uma vez fora da tabela externa.
Ou algumas linhas da tabela interna, em seguida, usar READ BINARY SEARCH e LOOP ... FROM INDEX com uma condição de saída, o que é muito importante.
Leia este blog, especialmente a última seção:
/people/siegfried.boes/blog/2007/09/12/runtimes-of-reads-and-loops-on-internal-tables
Siegfried
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute