Desenvolvimento de Trigger
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.
Desde de já Agradeço.
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
Curtidas 0
Respostas
Alex Lekao
15/07/2014
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.
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.
GOSTEI 0
Kaio
15/07/2014
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
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
GOSTEI 0
Alex Lekao
15/07/2014
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?
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?
GOSTEI 0
Marisiana Battistella
15/07/2014
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ó.
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ó.
GOSTEI 0
Marisiana Battistella
15/07/2014
Sem contar que reduz o número de objetos que são executados e, imagino que, exige menos processamento do banco...
GOSTEI 0
Kaio
15/07/2014
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
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
GOSTEI 0
Kaio
15/07/2014
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.
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.
GOSTEI 0
Alex Lekao
15/07/2014
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.
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.
GOSTEI 0
Marisiana Battistella
15/07/2014
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.
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...
GOSTEI 0