Fórum Ajuda com trigger de verificação #599274
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
Curtir tópico
+ 2Post 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
Gostei + 2
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;
Gostei + 0
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;
Gostei + 1
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!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)