[firebase-br] Como posso fazer essa procedure

Marcelo Papuska krpmate em gmail.com
Ter Fev 26 18:25:07 -03 2008


Ola, pelo que entendi, voce esta precisando uma procedure que atualize o
campo atual_cota na tabela de usuarios, certo ?
bem, se for isto vamos aos fatos.

Seria melhor, voce criar uma trigger que atualiza-se o campo a cada compra.

quando a SP, seria executada quando vc emite o relatorio ou consulta por
usuario (verifique bem os seus indices).

Pergunta 1: As cotas sao mensais ou anuais?
Pergunta 2: Como estao os indices da tabela de compra ?

Bem, seria interessante vc ter um indice na tabela de compras por
(DATA_COMPRA,USUARIO) , isto ira agilizar nosso processo.

Opcao 1: Cotas Anuais.

update usuario
set atual_cota = coalesce((select sum(compras.valor_compra) from compras
                          where extract(year from compras.data_compra) =
:ano
                             and compras.usuario = usuario.codigo_usuario
),0)

where tipo_usuario = 'Comprador' // se vc nao tiver tipo de usuario, remova
esta linha.

Opcao 2: Cotas Mensais  (basicamente e o mesmo mas devemos colocar o mes
tb.)

 update usuario
set atual_cota = coalesce((select sum(compras.valor_compra) from compras
                          where extract(year from compras.data_compra) =
:ano
                             and extract(month from compras.data_compra) =
:mes
                             and compras.usuario = usuario.codigo_usuario
),0)

where tipo_usuario = 'Comprador' // se vc nao tiver tipo de usuario, remova
esta linha.

Na opcao1, vc tera que passar apenas o Ano, ja na 2 ano e mes
vc pode incrementar o comando, passando o usuario mas isto vai depender da
tua necessidade.

Volto a recomendar a Trigger no seu caso.

Espero ter ajudado.

Abracao.



Mais detalhes sobre a lista de discussão lista