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 

Multiple Rows in Singleton Select (em Trigger)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
matheuspolli
Novato
Novato


Registrado: Segunda-Feira, 4 de Dezembro de 2017
Mensagens: 2

MensagemEnviada: Seg Dez 04, 2017 8:18 am    Assunto: Multiple Rows in Singleton Select (em Trigger) Responder com Citação

Bom dia pessoal,
Estou tendo o retorno de múltiplas linhas no select.

Código:

AS
DECLARE VARIABLE VALOR_COMISSAO NUMERIC(9,2);
DECLARE VARIABLE PARCELAS INTEGER;
DECLARE VARIABLE CR_CODIGO INTEGER;
DECLARE VARIABLE CR_VENCIMENTO TIMESTAMP;
DECLARE VARIABLE COM_LIBERACAO TIMESTAMP;
BEGIN
IF ((NEW.VEN_DEVOLUCAO = 1) AND (NEW.VEN_DEVOLUCAO_VENDA IS NOT NULL)) THEN
   BEGIN
   SELECT CAST( SUM(CAST( ((VEN_QTDE * VEN_PRECO_UNITARIO) * (1-(VEN_DESCONTO/100)))*(VEN_COMISSAO/100) AS NUMERIC(9,2))) AS NUMERIC(9,2))FROM VENDAS_VIAS WHERE VENDAS_VIAS.VEN_CODIGO = NEW.VEN_CODIGO INTO :VALOR_COMISSAO;
   SELECT COUNT(*) FROM CRECEBER WHERE VEN_CODIGO = NEW.VEN_DEVOLUCAO_VENDA AND CR_STATUS = 1 INTO :PARCELAS;
   IF ((VALOR_COMISSAO <0> 0)) THEN
      FOR SELECT CR_CODIGO, CR_VENCIMENTO FROM CRECEBER WHERE VEN_CODIGO = NEW.VEN_DEVOLUCAO_VENDA AND CR_STATUS = 1 INTO :CR_CODIGO, :CR_VENCIMENTO DO
         BEGIN
         IF (NOT EXISTS(SELECT COM_CODIGO FROM COMISSAO WHERE VEN_DEVOLUCAO = NEW.VEN_CODIGO)) THEN
            BEGIN
           SELECT COM_LIBERACAO FROM COMISSAO WHERE CR_CODIGO = :CR_CODIGO INTO :COM_LIBERACAO;
            IF (COM_LIBERACAO IS NOT NULL) THEN
               COM_LIBERACAO = 'now';
            INSERT INTO COMISSAO VALUES (GEN_ID(GERA_ID_COMISSAO, 1), NEW.VEN_DATA, :CR_CODIGO, NEW.FUN_CODIGO, NEW.VEN_DEVOLUCAO_VENDA, :CR_VENCIMENTO,
            CAST(:VALOR_COMISSAO / :PARCELAS AS NUMERIC(9,2)), :COM_LIBERACAO, NULL, NEW.VEN_CODIGO, 0);
            END
         ELSE
            UPDATE COMISSAO SET COM_VALOR = CAST(:VALOR_COMISSAO / :PARCELAS AS NUMERIC(9,2)) WHERE CR_CODIGO = :CR_CODIGO AND VEN_DEVOLUCAO = NEW.VEN_CODIGO;
         END
   END
END


Porém ao ir debugando a trigger, testei os selects onde retornam apenas 1 registro. E realizei o teste colocando exception na seguinte parte:

-- coloquei um aqui --- ele aparece
Código:
 SELECT COM_LIBERACAO  FROM COMISSAO WHERE CR_CODIGO = :CR_CODIGO INTO :COM_LIBERACAO;

-- coloquei aqui também e erro é retornado sem aparecer exception.

Estou achando que problema é no INTO :COM_LIBERACAO;
Porém já testei mudar os tipos do campo, realizar cast para date e não funciona. (dropei a trigger e recriei a mesma)

Alguém pode me ajudar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Dez 04, 2017 9:31 am    Assunto: Responder com Citação

Bom dia,

Não sei se entendi corretamente mas experimente fazer uns testes deixando o campo Com_Liberacao dentro de uma função de agregação:

Código:
           SELECT MAX(COM_LIBERACAO) FROM COMISSAO WHERE CR_CODIGO = :CR_CODIGO INTO :COM_LIBERACAO;


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
matheuspolli
Novato
Novato


Registrado: Segunda-Feira, 4 de Dezembro de 2017
Mensagens: 2

MensagemEnviada: Seg Dez 04, 2017 12:21 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Não sei se entendi corretamente mas experimente fazer uns testes deixando o campo Com_Liberacao dentro de uma função de agregação:

Código:
           SELECT MAX(COM_LIBERACAO) FROM COMISSAO WHERE CR_CODIGO = :CR_CODIGO INTO :COM_LIBERACAO;


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão


Obrigado amigo, deu certo.
Estava tentando fazer com cast, mas não estava dando certo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
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
Página 1 de 1

 
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