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