Fórum Desenvolvimento de Trigger #485519

15/07/2014

0

Bom dia a todos!

Estou precisando desenvolver um trigger que bloqueie a deleção de uma requisição quando a mesma ja estiver aprovada, mas porem minha nunca cai na regra que bloqueio, já fiz o select fora da trigger e retorna valor maior que 0.

CREATE OR REPLACE TRIGGER NOME
BEFORE DELETE ON SOLICITACAO

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

DECLARE
w_existe varchar2(30);               
BEGIN
   IF DELETING THEN
         select count (soc_st_descricao) 
                 into  w_existe 
                 from  OCOR_SOLICITACAO I
                 where I.sol_codigo          = :old.sol_codigo 
                 and   I.pad_in_codigo       = :old.pad_in_codigo
                 and   I.tab_in_codigo       = :old.tab_in_codigo
                 and   I.tau_st_codigo       = :old.tau_st_codigo
                 and   I.org_in_codigo       = :old.org_in_codigo;
                 and   I.descricao_aprovacao = '_Aprovado'
        
           if w_existe >= 1 then              
                 RAISE_APPLICATION_ERROR(-20205,'Requisição não pode ser excluida.');
           END IF; 
    END IF;
END; 


Desde de já Agradeço.
Kaio

Kaio

Responder

Posts

17/07/2014

Alex Lekao

Ola Boa tarde!!!

Nao manjo muito de SQL e de Oracle muito menos.

Mas deixa eu entender e quem sabe consigo te ajudar a achar o caminho das pedras. rsrsr

Quando vc executa o script para dar o valor que impessa o bloqueio ele sempre da o valor maior que zero e com isso permite?

A condicional que vc precisa para permitir a exclusao ou nao, eh 0 e 1?

Abraco.
Responder

Gostei + 0

17/07/2014

Kaio

Boa tarde Alex!

Sempre que o count retornar maior ou igual a 1 ele teria que entrar na condição de bloqueio, porem isso não esta acontecendo, se for 0 ele permite excluir.

Abraço
Responder

Gostei + 0

17/07/2014

Alex Lekao

ok.

Ja vi situacoes parecidas em empresas que trabalhei e o controle disso era feito na aplicacao e nao no banco.

Fica mais facil, acredito.

Agora, acho que deveriamos analisar o Script isoladamente e depois tentar montar a procedure/trigguer.

Vamos tentar analisar a somente o script e conseguir faze-lo retornar o que vc precisa, ele ja esta funcionando corretamente?
Responder

Gostei + 0

18/07/2014

Marisiana Battistella

Por que você simplesmente não faz esse controle no procedimento que irá realizar a exclusão?
Você verifica a situação e depois utiliza uma estrutura de controle pra realizar o que é necessário em cada condição.
Muito mais simples de se fazer e regra de negócio fica mais visível, pois ela está em um local só.
Responder

Gostei + 0

18/07/2014

Marisiana Battistella

Sem contar que reduz o número de objetos que são executados e, imagino que, exige menos processamento do banco...
Responder

Gostei + 0

18/07/2014

Kaio

Boa tarde Alex!


Fiz um teste amarrando uma solicitação em minha trigger executei e funcionou perfeitamente o problema então esta no :old, o select não esta conseguindo trazer o valor esperado.

Abraço
Responder

Gostei + 0

18/07/2014

Kaio

Boa tarde Marisiana, tudo bem?

Com ERP que trabalho eu não tenho acesso a certos procedimentos por serem criptografados, por isso estou fazendo uma trigger separada para bloquear essa exclusão.

Abraço.
Responder

Gostei + 0

18/07/2014

Alex Lekao

Vixi cara...

ja aconteceu isso comigo, eu fiz uma triguer para fazer uma operacao que o ERP nao considerava os caras foram la e removaram a trigguer e bloquearam o acesso a estes recursos. kkkk

Mas no caso seria justamente essa a questao, precisamos avaliar o script para ver o que esta errado e que nao traz o retorno esperado.
Responder

Gostei + 0

19/07/2014

Marisiana Battistella

Boa tarde Marisiana, tudo bem?

Com ERP que trabalho eu não tenho acesso a certos procedimentos por serem criptografados, por isso estou fazendo uma trigger separada para bloquear essa exclusão.

Abraço.

Humm.. entendi!
Mas como vc está trabalhando no ERP e não tem acesso aos códigos dele? Não entendi o pq disso...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar