Firebird 3 - Substituição de Função Dzero (rfunc.dll)


Terminado
Descripción:
Estou convertendo meu banco de dados FIREBIRD 2.5 para FIREBIRD 3.0
Utilizava algumas funções de rfunc.dll e outras dll's. Fiz todas as conversões, exceto da função DZERO.
Meu banco de dados já está funcionando perfeitamente no FIREBIRD 3.0, mas utilizando a versão de 32 bits, somente por causa da função DZERO. Não achei a rfunc.dll 64 bits. Mesmo achando, gostaria de substituir a função DZERO por outra compatível/apropriada.
A função DZERO faz a divisão de um campo por outro e retorna 0, não dá erro de divisão por 0, quando o divisor for nulo ou zero. DZERO(DIVIDENDO, DIVISOR, 0) = Retorna DIVIDENDO/DIVISOR, ou 0 (se divisor é nulo ou 0).
Num select posso substituir facilmente por um case:
DZERO(p.preco_venda, p.preco_compra, 0) as margem_venda
// pode ser substituído por:
CASE WHEN (p.preco_compra = 0)
THEN 0
ELSE (p.preco_venda / p.preco_compra)
END margem_venda

Meu problema está em substituir a função na cláusula WHERE. Tenho algumas rotinas com o DZERO na cláusula. Vou colocar apenas 1 exemplo. Funcionando aqui, vai funcionar nas outras e vou poder passar a utilizar o FIREBIRD 3.0 64 bits.

- Exemplo de Select, onde quero substituir o DZERO da cláusula WHERE:
SELECT count(p.id_produto) as NTITE, SUM(ps.quantidade) as NTEST,
SUM(ppe.preco_venda * ps.quantidade) as NTVTO,SUM(ps.valor) as NTCTO,
min(ppe.preco_venda) as NTVMI, avg(ppe.preco_venda) as NTVME, max(ppe.preco_venda) as NTVMA,
min(p.preco_compra) as NTCMI, avg(p.preco_compra) as NTCME, max(p.preco_compra) as NTCMa
FROM es_produto p
LEFT JOIN ES_PROSALDO PS ON P.ID_PRODUTO = PS.ID_PRODUTO AND ps.id_empresa=:idE AND PS.ID_TIPO_ESTOQUE=:idT
INNER JOIN es_grupo g ON g.id_grupo = p.id_grupo
INNER JOIN es_marca m ON m.id_marca = p.id_marca
LEFT JOIN es_preco_empresa ppe ON ppe.id_empresa = :idE and ppe.id_produto=p.id_produto
LEFT JOIN ge_pessoa f ON f.id_pessoa = p.id_fornecedor
WHERE p.estoque = 'S' AND p.id_grupo = 1 AND ps.quantidade 0 AND (DZERO(p.preco_venda, p.preco_compra, 0) BETWEEN 1 and 3)

Categoria: IT & Programação
Subcategoria: Programação
Qual é o alcance do projeto?: Bug ou alteração pequena
Isso é um projeto ou uma posição de trabalho?: Um projeto
Tenho, atualmente: Eu tenho especificações
Experiência nesse tipo de projeto: Sim (Eu já gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Funções necessárias: Desenvolvedor

Abierto

Presupuesto

1

Propuestas

1

Freelancers interesados

Publicado: Hace 3 meses

Plazo: 7 días

Freelancers que ya aplicaron para este trabajo

Wellington D. Trabalho com desenvolvimento e manutenção de sistemas ERPs de médio porte há mais de 4 anos, utilizados por mais de 150 clientes e mais de 2000 usuários. Sempre busco entregar o trabalho com maior qualidade e eficiên... + detalles