Escolar Documentos
Profissional Documentos
Cultura Documentos
O Primeiro campo dos índices deve sempre ser informado, como para o Protheus todos os
índices começam com Filial, então, informar a Filial se faz como obrigatório
• Fazer sempre uso da primeira coluna do índice, que no caso do Protheus é sempre
colocar a filial. Para os casos em que a tabela possui o modo compartilhado, ou seja, a
filial é em branco usar como o exemplo: "B1_FILIAL = ' '". Para o caso em que a filial é
exclusiva, ou se especifica a filial, ex: "F1_FILIAL = '13'", ou para ver todos os registros,
pode-se utilizar a cláusula como exemplo "F1_FILIAL > CHR(0).
A concatenação entre cadeia de caracteres ( que no Oracle se dá via caractere pipe: ||)
deve ser evitada. Visto que desta forma o Oracle precisa concatenar todos os registros antes
de efetuar o filtro dos dados na amarração entre tabelas. A utilização de concatenação não faz
busca por índice. O mesmo ocorre com operações no início da cadeia de caracteres, como o
“like ‘%teste’, ou a retirada de caracteres do ínicio da cadeia (Ex. TRIM(), LTRIM()). Há impacto
em qualquer manipulação de caracteres, porém no início o impacto é muito significativo.
Uma das alternativas é usar a Cláusula IN para evitar concatenação de colunas, não de strings
select E5_LA, E.* from se5010 E where e5_filial = ' ' AND
E5_PREFIXO||E5_NUMERO||E5_PARCELA||E5_CLIFOR IN ('UNI050219AA PI0030') and
D_E_L_E_T_ = ' '
select E5_LA, E.* from se5010 E where e5_filial = ' ' AND
(E5_PREFIXO,E5_NUMERO,E5_PARCELA,E5_CLIFOR) IN
(('UNI','050219','AA','PI0030'),('MAN','191214','001','PI0030')) and D_E_L_E_T_ = ' '
ou
select E5_LA, E5.* from se5010 E5 where e5_filial = ' ' AND
(E5_PREFIXO,E5_NUMERO,E5_PARCELA,E5_CLIFOR) IN ( select E2_PREFIXO,E2_NUM,
E2_PARCELA, E2_FORNECE from se2010 E where e2_filial = ' ' AND E2_NUM='050219' AND
E2_PREFIXO='UNI' AND E2_PARCELA='AA' and e.D_E_L_E_T = ' ') and D_E_L_E_T = ' '
Evite o uso do DISTINCT. Normalmente é usado este comando quando há problemas entre a
amarração (JOIN) entre as tabelas.