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: Programación y Tecnología
Subcategoria: Programación Web
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
Disponibilidade requerida: Conforme necessário
Experiência nesse tipo de projeto: Sim (Eu já gerenciei esse tipo de projeto)
Funções necessárias: Desenvolvedor

Abierto

Presupuesto

1

Propuestas

1

Freelancers interesados

Publicado: Hace un año

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