Faccruz 0 Denunciar post Postado Junho 22, 2010 Boa tarde, Os dados dessa tabela são importados através de um arquivo texto, até aí tudo bem, está funcionando. Porém o Campo sequencia está errado (estou retornando o maior + 1), mas o correto é a seguinte forma: (Chave Composta contendo Código, TipoPreco, Filial, Sequencia) Código TipoPreco Sequencia Filial ValidadeFim 585880 1 1 999 null 585880 1 2 999 21/06/2010 585880 2 1 999 null 585880 2 2 999 null 585880 1 3 999 22/06/2010 585880 1 1 001 30/06/2010 585880 1 2 001 01/07/2010 Traduzindo em palavras caso encontre algum valor (Codigo, TipoPreco, Filial) identico no banco, a sequencia vai ser sempre a proxima, porem se encontrar a ValidadeFim mais recente, a sequencia tem que ser a maior também. espero ter conseguido me expressar bem. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 22, 2010 Não sei o seu nível de conhecimento mas, pelo que entendi a melhor solução parace uma trigger de BEFORE INSERT que faça este cálculo da sequencia de forma automÁtica. grosso modo CREATE OR REPLACE TRIGGER TRG_TABELA BEFORE INSERT ON TABELA DECLARE VN_SEQUENCIA NUMBER; BEGIN BEGIN SELECT SEQUENCIA INTO VN_SEQUENCIA FROM TABELA WHERE Codigo ::NEW.CODIGO AND TipoPreco = NEW.TIPOPRECO AND FILIAL = :NEW.FILIAL; EXCEPTION WHEN NO_DATA_FOUND THEN VN_SEQUENCIA:=0; END; VN_SEQUENCIA:=VN_SEQUENCIA+1; NEW.SEQQUENCIA := VN_SEQUENCIA; END; Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Junho 22, 2010 Não sei o seu nível de conhecimento mas, pelo que entendi a melhor solução parace uma trigger de BEFORE INSERT que faça este cálculo da sequencia de forma automÁtica. grosso modo CREATE OR REPLACE TRIGGER TRG_TABELA BEFORE INSERT ON TABELA DECLARE VN_SEQUENCIA NUMBER; BEGIN BEGIN SELECT SEQUENCIA INTO VN_SEQUENCIA FROM TABELA WHERE Codigo ::NEW.CODIGO AND TipoPreco = NEW.TIPOPRECO AND FILIAL = :NEW.FILIAL; EXCEPTION WHEN NO_DATA_FOUND THEN VN_SEQUENCIA:=0; END; VN_SEQUENCIA:=VN_SEQUENCIA+1; NEW.SEQQUENCIA := VN_SEQUENCIA; END; Fiz semelhante você me passou, mas não reconheceu esse New.Sequencia no final da Trigger Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 22, 2010 A sintaxe correta é : :NEW.<CAMPO> Variável que tem o novo valor da coluna (<campo>, no caso do insert o próprio valor inserido. Obs : A trigger deve ser do tipo FOR EACH ROW. A síntaxe é :new.<campo> Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Junho 25, 2010 A síntaxe é :new.<campo> muito obrigado! era praticamente isso que eu precisava, agora irei fazer mais alguns testes referentes as particularidades que me passaram. A síntaxe é :new.<campo> muito obrigado! era praticamente isso que eu precisava, agora irei fazer mais alguns testes referentes as particularidades que me passaram. Amigo, bom dia! É quase isso que eu preciso! A unica coisa que me avisaram (hoje - 25/06/2010) é que quando a ValidadeFim estiver nula/branco tem que ter a sequencia maior. Outra coisa, é preciso criar uma Trigger after update que faça a mesma coisa, ou seja, a data mais recente vai ter a maior sequencia. Posso utilizar a mesma idéia? Compartilhar este post Link para o post Compartilhar em outros sites