Fórum Mudar statu de um Produto via StoredProcedure #39447
15/10/2003
0
Naonob
Curtir tópico
+ 0Posts
15/10/2003
Afarias
create procedure verifica_validade as
begin
update produtos ser status = ´vencido´
where (current_date - data_cadastro) > 180;
// 180dias = 6meses * 30dias
end^
se vc não quizer usar algo aproximado como 180 ou 183 para os 6 meses ... vc pode fazer contas mais apuradas ou usar uma UDF
T+
Gostei + 0
15/10/2003
Naonob
Bem para tirar a duvida era assim, tenho uma tabela serviço, itens_servico e produto. Tenho que mudar o status(campo) do produto que tenho de verificar sempre a data da emissao do serviço, que seria a data do serviço. E ve se ja passaram 6 meses e se tiver passado 6 meses e o status do produto ainda estiver ´Não vencido´ mudar para ´vencido´. Com sua ajuda tenho de acrescentar um codição, certo!
Obrigado!
Gostei + 0
15/10/2003
Afarias
T+
Gostei + 0
16/10/2003
Naonob
Caro afarias gostaria de pedir de novo a pergunta melhor.
Servico(Num_Servico,Dt_Emissao,TotalPreco)
Itens_Servico(Num_servico,Cod_Produto,Qtd,SubTotal)
Produto(Cod_Produto,Desc_Produto,Status,Pr_unit)
Tenho essas 3 tabelas relacionadas e quero fazer uma procedure que busca todos os serviços realizados(Dt_Emissao) que já passaram 6 meses da data de hoje e depois varrer mudando os status desses produtos que estão ´Não vencido´ para ´Vencido´. Como faço isso afarias? Ou Amigos do forum...
T+
Gostei + 0
16/10/2003
Afarias
create procedure verifica_validade as
declare variable cod_pro integer;
declare variable max_dt date;
begin
for select i.cod_produto, max(s.dt_emissao) from servico s
inner join itens_servico i on (i.num_servico = s.num_servico)
group by i.cod_produto having current_date - max(s.dt_emissao) > 180
into :cod_pro, :max_dt do
update produto set status = ´vencido´ where cod_produto = :cod_pro;
end^
existem algumas outras formas de fazer, inclusive com 1 update apenas (sem precisar do SP) ... mas ai vc vai vendo...
T+
Gostei + 0
17/10/2003
Naonob
Ah...Obrigado pela ajuda com especialização que deu certo, e desculpe por ser meio leigo nisso...
Gostei + 0
17/10/2003
Afarias
1 - o character set definido na conexão ´não bate´ com o definido no banco de dados (ou em algum campo q vc está acessando)
2 - vc quer jogar (ou tem) um valor string com caracteres não aceitos pelo character set do seu banco (alguns char sets não aceitam acentos por exemplo)
3 - alguma operação (´matemática´) foi ilegal -- como divisão por zero!! ou o resultado da operação está fora do permitido para aquele tipo de dados.
dê uma olhada com cuidado q vc acha o erro -- veja se não pode ser alguma data_venc. nula por ex. dê também uma verificada nas operações q está fazendo para não haver possibilidade de divisões por zero ou resultados incompatíveis com o tipo de dados.
T+
Gostei + 0
18/10/2003
Naonob
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)