Ajuda com trigger de verificação
Estou criando uma trigger para validar que quando o usuário logado seja de uma empresa ele só possa utilizar veículos dessa empresa e caso tente utilizar veículo da outra empresa ele apresente a mensagem de erro,. Mas não consigo fazer funcionar, ele sempre dá o retorno vazio "dados não encontrados", alguém poderia me ajudar?
CREATE OR REPLACE TRIGGER "AD_TGFVIAG_IUP_REGRAS" BEFORE INSERT OR UPDATE ON TGFVIAG FOR EACH ROW BEGIN DECLARE P_CODEMP1 INT; P_CODEMP3 INT; P_USUEMP INT; BEGIN /* Empresa do usuario */ SELECT TSIUSU.CODEMP INTO P_USUEMP FROM TSIUSU WHERE TSIUSU.CODUSU = STP_GET_CODUSULOGADO(); /* Busca o CODINSTPRINC e grava na variavel de empresa 3 */ IF P_USUEMP = 3 THEN SELECT AD_TGFVEIEMP.CODEMP INTO P_CODEMP3 FROM TGFVEI, AD_TGFVEIEMP WHERE TGFVEI.CODVEICULO = AD_TGFVEIEMP.CODVEICULO AND AD_TGFVEIEMP.CODEMP = 3 AND TGFVEI.CODVEICULO = :NEW.CODVEIPRIN; END IF; /* Busca o CODINSTPRINC e grava na variavel de empresa 3 */ IF P_USUEMP = 1 THEN SELECT AD_TGFVEIEMP.CODEMP INTO P_CODEMP1 FROM TGFVEI, AD_TGFVEIEMP WHERE TGFVEI.CODVEICULO = AD_TGFVEIEMP.CODVEICULO AND AD_TGFVEIEMP.CODEMP = 1 AND TGFVEI.CODVEICULO = :NEW.CODVEIPRIN; END IF; IF P_USUEMP =1 AND P_CODEMP3 =1 THEN RAISE_APPLICATION_ERROR(-20101,AD_FC_FORMATAHTML_BISPO(''Veículo não pode ser utilizado'', ''para a empresa selecionada'', ''!'')); END IF; END ; END;
Maicon Scapatici
Curtidas 2
Melhor post
Ana Lichirgu
14/01/2019
Que ótimo Maicon! Tô com um problema parecido!!! Em homologação minha trigger funciona, porém em produção não... e elas estão iguais...
Minha sugestão para casos parecidos no futuro, rode cada select separado pra vc ver o retorno (é o que to fazendo).
Espero ter ajudado!
Minha sugestão para casos parecidos no futuro, rode cada select separado pra vc ver o retorno (é o que to fazendo).
Espero ter ajudado!
GOSTEI 2
Mais Respostas
Maicon Scapatici
18/12/2018
corrigindo essa linha eu errei na hora de postar:
IF P_USUEMP =1 AND P_CODEMP3 =3 THEN RAISE_APPLICATION_ERROR(-20101,AD_FC_FORMATAHTML_BISPO(''Veículo não pode ser utilizado'', ''para a empresa selecionada'', ''!'')); END IF;
GOSTEI 0
Maicon Scapatici
18/12/2018
Resolvido! Para quem passar pelo mesmo problema eis a solução:
Sempre que ele verificava o usuário logado e uma empresa exemplo a empresa 1, a variável da empresa 3 ficava vazia, corrigi efetuando exceptions para inserir valor 0 para quando não for obter valor e resolveu. Segue código corrigido:
Sempre que ele verificava o usuário logado e uma empresa exemplo a empresa 1, a variável da empresa 3 ficava vazia, corrigi efetuando exceptions para inserir valor 0 para quando não for obter valor e resolveu. Segue código corrigido:
CREATE OR REPLACE TRIGGER "AD_TGFVIAG_IUP_REGRAS" BEFORE INSERT OR UPDATE ON TGFVIAG FOR EACH ROW BEGIN DECLARE P_CODEMP1 INT; P_CODEMP3 INT; P_USUEMP INT; BEGIN BEGIN BEGIN /* Empresa do usuario */ SELECT TSIUSU.CODEMP INTO P_USUEMP FROM TSIUSU WHERE TSIUSU.CODUSU = STP_GET_CODUSULOGADO(); /* Busca o CODINSTPRINC e grava na variavel de empresa 3 */ SELECT AD_TGFVEIEMP.CODEMP INTO P_CODEMP3 FROM TGFVEI, AD_TGFVEIEMP WHERE TGFVEI.CODVEICULO = AD_TGFVEIEMP.CODVEICULO AND AD_TGFVEIEMP.CODEMP = 3 AND TGFVEI.CODVEICULO = :NEW.CODVEIPRIN; EXCEPTION WHEN NO_DATA_FOUND then P_CODEMP3 := 0; END; /* Busca o CODINSTPRINC e grava na variavel de empresa 1 */ SELECT AD_TGFVEIEMP.CODEMP INTO P_CODEMP1 FROM TGFVEI, AD_TGFVEIEMP WHERE TGFVEI.CODVEICULO = AD_TGFVEIEMP.CODVEICULO AND AD_TGFVEIEMP.CODEMP = 1 AND TGFVEI.CODVEICULO = :NEW.CODVEIPRIN; EXCEPTION WHEN NO_DATA_FOUND then P_CODEMP1 := 0; END; /* Regrava o buffer :NEW.CODEMP */ IF P_USUEMP =1 AND P_CODEMP3 <>0 THEN RAISE_APPLICATION_ERROR(-20101,AD_FC_FORMATAHTML_BISPO('Veículo selecionado não pode ser', 'utilizado para esta empresa', 'Operação Será Cancelada')); END IF; IF P_USUEMP =3 AND P_CODEMP1 <>0 THEN RAISE_APPLICATION_ERROR(-20101,AD_FC_FORMATAHTML_BISPO('Veículo selecionado não pode ser', 'utilizado para esta empresa', 'Operação Será Cancelada')); END IF; END ; END;
GOSTEI 1
Maicon Scapatici
18/12/2018
Que ótimo Maicon! Tô com um problema parecido!!! Em homologação minha trigger funciona, porém em produção não... e elas estão iguais...
Minha sugestão para casos parecidos no futuro, rode cada select separado pra vc ver o retorno (é o que to fazendo).
Espero ter ajudado!
Minha sugestão para casos parecidos no futuro, rode cada select separado pra vc ver o retorno (é o que to fazendo).
Espero ter ajudado!
Bom dia Ana! Obrigado pela sugestão! Vou começar a fazer isso sim. Tenha um bom fim de semana!
GOSTEI 0