long ret
if ret = -1 then
vismsg = 'Não foi possível executar '+VLSArquivo+'!'
return 0
end if
return 1
Blog criado para documentar e disseminar o conhecimento tecnológico adquirido por Thiago Campos Pereira e colaboradores.
Recentemente fiz um trabalho em conjunto com um excelente DBA Oracle para analisarmos alguns pontos de baixa performance.
Um dos pontos que mais causou problemas foi o tratamento dado ao desenvolvedores para os parâmetros opcionais.
Por exemplo, vamos dizer que em uma consulta você tem três parâmetros e todos eles são opcionais. Abaixo estou listando as soluções adotadas e o que podemos concluir das mesmas:
1) Passar Nulo no parâmetro não informado
Where ( Campo1 = :Parametro1 or :Parametro1 is null)
And ( Campo2 = :Parametro2 or :Parametro2 is null)
And ( Campo3 = :Parametro3 or :Parametro3 is null)
Nesta solução, se o parâmetro for informado ele é passado para a query, ao contrário passa-se nulo.
Essa é a pior solução que pode ser adotada. O otimizador do Oracle identifica o OR e verifica que a mesma coluna não é utilizada nas duas comparações e por isso não utiliza índice, degradando em muito o tempo de resposta da query.
2) Passar o valor por limite
Where ( Campo1 Between :Parametro1_ini and :Parametro1_fim)
And (Campo2 Between :Parametro2_ini and :Parametro2_fim)
And (Campo3 Between :Parametro3_ini and :Parametro3_fim)
Nesta solução, se o parâmetro for informado, o valor é passado para o parâmetro inicial e final, por exemplo Campo1 between 45 and 45. Ao contrário, é passado um valor de forma a não filtrar os dados, por exemplo Campo1 between 0 and 9999.
Essa solução, apensar de funcionar, deve ser evitada, pois em algumas situações o Oracle armazena o plano de execução para utilizá-lo futuramente, com a intenção de melhorar a performance da query, evitando a analise necessária para identificar o melhor plano. Como os valores passados por limite podem vária, este tipo de query pode prejudicar o trabalho do otimizador.
Além disso, se você passa apenas um parâmetro, você está gerando trabalho extra para o Oracle, que tem que avaliar se os dois outros parâmetros devem ou não ser utilizados pelo filtro.
3) Montar a Query Dinamicamente
Essa é a melhor solução, onde alteramos a query em tempo de execução passando apenas os valores necessários. Dessa forma, o otimizador pode trabalhar com uma query mais simples e montar o plano de execução com mais precisão.
Devo lembrar que em algumas situações, como a utilização de Composites complexas, essa solução não poderá ser adotada. Neste caso, recomendo utilizar a solução B.
Estou tentnado utilizar o Constructor do CodeWarrior em uma máquina com 1GB de memória RAM e a ferramenta me retorna o erro abaixo.
"Memory is getting low. Try closing some windows, or give Constructor a largermemory partition."
Procurei em vários sites e não obtive sucesso na solução do problema.
No site da Metrowerks, proprietária od CodeWarrior, achei o seguinte artigo:
Each time I run Constructor on my system, I receive an error window that reads,
"Memory is getting low. Try closing some windows, or give Constructor a larger
memory partition."
This error message is a bug within Constructor. It reports a low memory error on any
system that contains 512 MB or more of RAM. Usually, the error is triggered if you have a
multiple of 512 MB on your system, so 1024 MB would cause the error, but 768 MB may
not.
Therefore, the solution would be to try increasing or decreasing the amount of RAM the
system is currently using. However, various users have had this problem go away by
changing the amount of virtual memory the system uses in the System settings, so this is
another option to try. Palm is aware of this problem and should be working on a fix for
future releases of Constructor. Since Constructor is maintained and distributed by Palm as
part of the Palm OS SDK, any bug fixes or feature requests for Constructor can be
implemented only by Palm.
Após N dias e muita pesquisa tentando resolver este problema, consegui a solução que é instalar o Constructor for Palm OS 1.9. Então começou outra luta, onde encontrar a atualização!!!
Foram gastos mais N dias para achar essa atualização, que se encontra no SDK R3 para PALM OS 5. Aproveitei e já baixeis a versão 1.9.1, que é a mais recente.
Mas, o melhor de tudo, que após este trabalho todo, o problema agora está resolvido.
Fico muito feliz em poder publicar este problema aqui e puder ajudar outras pessoas. Afinal, foram um mês e meio de pesquisa para resolver este problema.