Ajuda com trigger de verificação
18/12/2018
0
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
Post mais votado
14/01/2019
Minha sugestão para casos parecidos no futuro, rode cada select separado pra vc ver o retorno (é o que to fazendo).
Espero ter ajudado!
Ana Lichirgu
Mais Posts
18/12/2018
Maicon Scapatici
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;
18/12/2018
Maicon Scapatici
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;
18/01/2019
Maicon Scapatici
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!
Clique aqui para fazer login e interagir na Comunidade :)