ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda para criar trigger
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 7:20 am    Assunto: Ajuda para criar trigger Responder com Citação

Pessoal, to precisando de uma mãozinha pra criar esta trigger:

tenho esta tabela:

Código:
CREATE TABLE BAIXA_PROD_ESTO_FRACIONADA (
    ID            INTEGER NOT NULL,
    ID_SERVICO    INTEGER,
    ID_MOVCONTA   INTEGER,
    ID_PRODUTO    INTEGER,
    FRACAO_USADA  DOUBLE PRECISION
);


depois a cada inserção nesta tabela preciso executar o seguinte.

primeiro preciso executar este select:

Código:
select
       B.ID_PRODUTO,
       P.CUSTO,
       SUM(B.FRACAO_USADA) as  FRACAO_USADA
from PRODUTO as P INNER JOIN  BAIXA_PROD_ESTO_FRACIONADA as B
ON P.ID = B.ID_PRODUTO
group by
1,2


bom ai que começa...

apos executar esta consulta... preciso armazenar a soma de cada resultado agrupado em uma variavel pra depois ir comparando P.CUSTO do produto dele mesmo. Esta soma esta agrupando por produto, então a comparação seria com seu produto correspondente, que esta na tabela BAIXA_PROD_ESTO_FRACIONADA.

Código:
Soma >= P.Custo


ao realizar esta verificação o que tenho q fazer é o seguinte:

se a Soma for igual ao valor do P.Custo então realizaria uma inserção em outra tabela e deletaria estes dados da soma deste agrupamento.

se a Soma for maior do que P.Custo então realizaria uma uma outra conta.

Código:
Soma - P.Custo


o resultado armazenaria em uma variavel, faria uma iserção em outra tabela e realiazaria uma iserção neste mesma tabela com o resultado q foi guardado na variavel e em seguida um delete nos dados da soma agrupada...
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 8:57 am    Assunto: Responder com Citação

da uma olhada ai



Código:

AS
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
begin
  for select
       B.ID_PRODUTO,
       P.CUSTO,
       SUM(B.FRACAO_USADA) as  FRACAO_USADA
    from PRODUTO as P INNER JOIN  BAIXA_PROD_ESTO_FRACIONADA as B
    ON P.ID = B.ID_PRODUTO
    group by 1,2
      into :vIDPRODUTO, :vCUSTO, :vFRACAO_USADA
  do begin
      if (:vFRACAO >= vCUSTO) then
      begin
          /* REALIZA A INSERCAO EM OUTRA TABELA */
      end
  end
end
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 12:23 pm    Assunto: Responder com Citação

Rafa... vlw cara...

e la vou eu de novo...rs

fiz o seguinte:

Código:
AS
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);
begin
  for select
       B.ID_PRODUTO,
       P.CUSTO,
       P.ID,
       SUM(B.FRACAO_USADA) as  FRACAO_USADA
    from PRODUTO as P INNER JOIN  BAIXA_PROD_ESTO_FRACIONADA as B
    ON P.ID = B.ID_PRODUTO
    group by 1,2,3
      into :vIDPRODUTO, :vCUSTO, :vID,  :vFRACAO_USADA
  do begin
      if (:vFRACAO_USADA = vCUSTO) then
      begin
          /* INSERE NA TABELA MOVPRODUTO*/
          insert into movproduto (
          ID_PRODUTO, QUANTIDADE, TIPOMOV, DATA)
          values (new.id_produto, '1', '1', current_date);
    end
    if (:vFRACAO_USADA = vCUSTO) then
      begin
          /* DELETA OS DADOS ATUAIS */
          delete from BAIXA_PROD_ESTO_FRACIONADA
         where ID_PRODUTO = new.id_produto;
    end

    if (:vFRACAO_USADA > vCUSTO) then
      begin
          vdiferenca = vfracao_usada - vcusto;
         
          /* INSERE NA TABELA MOVPRODUTO*/
          insert into movproduto (
          ID_PRODUTO, QUANTIDADE, TIPOMOV, DATA)
          values (new.id_produto, '1', '1', current_date);

          /* INSERE NA TABELA BAIXA FRACIONADA A DIFERENÇA ENCONTRADA*/
          insert into baixa_prod_esto_fracionada (
          ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
          values (new.id_servico, new.id_produto, :vdiferenca);
    end
     if (:vFRACAO_USADA > vCUSTO) then
      begin
          /* DELETA OS DADOS ATUAIS */
          delete from BAIXA_PROD_ESTO_FRACIONADA
         where ID_PRODUTO = new.id_produto;
    end
  end
end


Só que agora esta dando um erro quando esta consulta é verdadeira
Código:
 if (:vFRACAO_USADA > vCUSTO) then


creio q o erro esteja em inserir na tabela baixa_prod_esto_fracionada o valor da diferença q esta na variavel vDIFERENCA mas não consegui encontrar o pq
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 1:05 pm    Assunto: Responder com Citação

não entendi?
qual é o erro?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 1:08 pm    Assunto: Responder com Citação

uma das coisa q eu vi é q ta faltando o ID_MOVCONTA

Código:

          insert into baixa_prod_esto_fracionada (
          ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
          values (new.id_servico, new.id_produto, :vdiferenca);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 2:03 pm    Assunto: Responder com Citação

rafmattos escreveu:
uma das coisa q eu vi é q ta faltando o ID_MOVCONTA

Código:

          insert into baixa_prod_esto_fracionada (
          ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
          values (new.id_servico, new.id_produto, :vdiferenca);


Então este ID_MOVCONTA não interfere em nada... pois não é obrigatorio.... mas o erro é este.


_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:07 pm    Assunto: Responder com Citação

vixi esse erro é de estouro de campo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 2:08 pm    Assunto: Responder com Citação

rafmattos escreveu:
vixi esse erro é de estouro de campo


vixi mano q isso? Shocked
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:09 pm    Assunto: Responder com Citação

Código:

insert into baixa_prod_esto_fracionada (
          ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
          values (new.id_servico, new.id_produto, cast(:vdiferenca as numeric(15,2)));


tenta assim pra gente ve
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:12 pm    Assunto: Responder com Citação

edsonalves escreveu:
rafmattos escreveu:
vixi esse erro é de estouro de campo


vixi mano q isso? Shocked



o campo não suportou a qtde de numeros ou carcteres q foi passado para ele. pq ele é menor
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 2:20 pm    Assunto: Responder com Citação

rafmattos escreveu:
Código:

insert into baixa_prod_esto_fracionada (
          ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
          values (new.id_servico, new.id_produto, cast(:vdiferenca as numeric(15,2)));


tenta assim pra gente ve


deu mesmo erro.
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:29 pm    Assunto: Responder com Citação

muda os tipos das suas variavel igual ta no banco

Código:

declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:31 pm    Assunto: Responder com Citação

essa tabela baixa_prod_esto_fracionada possui alguma trigger ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qui Fev 03, 2011 2:33 pm    Assunto: Responder com Citação

rafmattos escreveu:
muda os tipos das suas variavel igual ta no banco

Código:

declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);


Como assim? as variaveis já estão desse jeito ai...

o campo onde passo o valor q esta em vDIFERENCA no banco é
DOUBLE PRECISION
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Qui Fev 03, 2011 2:40 pm    Assunto: Responder com Citação

então ao inves de numeric muda para DOUBLE PRECISION
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB