Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hamzi

criação de trigger no oracle

Recommended Posts

Estou tentando criar uma trigger para que quando um registro seja deletado de uma determinada tabela seja guardado em uma tabela auxiliar de auditoria a informação de 3 colunas.

 

Ao rodar o script abaixo a trigger é criada mas não é compilada. Alguém pode me ajudar ???

 

CREATE OR REPLACE TRIGGER TRG_DEL_SMORCALOG
AFTER DELETE ON SMORCA
FOR EACH ROW
BEGIN
DECLARE
 	/*VARIAVEIS*/
	IdLogin NUMBER(10);
	V_OsUser VARCHAR2(30);
	v_Machine VARCHAR2(64);
	v_Program VARCHAR2(48);
	v_LogonTime DATE;
BEGIN
	 -- INCIANDO A GRAVAÇÃO DA TABELA DE LOGIN
	SELECT
		  OSUSER ,
		  MACHINE,
		  PROGRAM,
		  LOGON_TIME
	INTO
	 	  V_OsUser,
   		  v_Machine,
		  v_Program,
		  v_LogonTime
	FROM
		  V$SESSION
	WHERE
		AUDSID = USERENV('sessionid');

	-- FAZER O INSERT DA SMCONTALOG_IDLOG   

    SELECT SEQ_SMORCA_IDLOG.NEXTVAL INTO IDLOGIN FROM DUAL;

	INSERT INTO SMORCALOG
	(
	  SMORCALOG_IDLOG,
	  SMORCALOG_OSUSER,
	  SMORCALOG_MACHINE,
	  SMORCALOG_PROGRAM,
	  SMORCALOG_LOGONTIME,
	  SMORCALOG_IDUSUARIO,
	  SMORCALOG_TPMV,
	  SMORCALOG_DATAMV,
	  SMORCALOG_ID,
	  SMORCALOG_IDPESSOA,
	  SMORCALOG_IDUSR
  	    )
	VALUES
	(
	 	IDLOGIN,
		v_OSUSER,
		v_MACHINE,
		v_PROGRAM,
		v_LOGONTIME,
		Pkgsimah.IDUSUARIO,
		'E',
		SYSDATE,
		:OLD.SMORCA_ID,
		:OLD.SMORCA_IDPESSOA,
		:OLD.SMORCA_IDUSR
	);
END;
END TRG_DEL_SMORCALOG;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao rodar o script abaixo a trigger é criada mas não é compilada. Alguém pode me ajudar ???

 

A trigger existe ?

 

Está válida (valid) ?

 

Executa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SIM MOTTA, O SCRIPT É EXECUTADO MAS A TRIGGER FICA INVÁLIDA. E QUANDO EXECUTO UMA EXCLUSÃO NA TABELA QUE QUERO AUDITAR ELA NÃO DISPARA A TRIGGER. OBRIGADO PELO RETORNO.

 

Ao rodar o script abaixo a trigger é criada mas não é compilada. Alguém pode me ajudar ???

 

A trigger existe ?

 

Está válida (valid) ?

 

Executa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algum programa gerenciador tipo SqlDeveloper ou SqlTools ?

 

Consegue ver o erro que tem a trigger ?

 

No SqlPlus , após criar a trigger um SHOW ERRORS acho que funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando rodo o script no TOAD aparece a mensagem que a trigger foi criada ou alterada com sucesso, mas quando rodo no SQLPLUS aparece a mensagem que a trigger foi criada mas compilada com erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não fica inválida a trigger é executada , não tem jeito a não ser que esteja DISABLE.

 

Se tiver ENABLE mas inválida o Oracle :

 

1) Tenta compilar e se der zebra na compilação sobe um erro para o SQL chamador da trigger.

 

2) Se compilar executa a trigger .

Compartilhar este post


Link para o post
Compartilhar em outros sites

DESCULPA MOTTA, MAS NÃO ENTENDI.

 

 

Se não fica inválida a trigger é executada , não tem jeito a não ser que esteja DISABLE.

 

Se tiver ENABLE mas inválida o Oracle :

 

1) Tenta compilar e se der zebra na compilação sobe um erro para o SQL chamador da trigger.

 

2) Se compilar executa a trigger .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma TRIGGER pode estar

 

USER_TRIGGERS.STATUS (ENABLE/DISABLE) - Executa/não executa

 

 

USER_OBJECTS.STATUS (VALID/INVALID) - Válida/Inválida (Após a compilação)

 

Se ela estiver ENABLE e VALID é chamada

Se estiver ENABLE e INVALID e compilida

__Se ficar VALID é chamada

__Senão (INVALID) um erro é enviado a query chamadora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta assim Motta.

 

Na View USER_TRIGGERS ela esta Enable

Na View USER_OBJECTS ela esta Invalid

-------------------------------------------------------

Uma TRIGGER pode estar

 

USER_TRIGGERS.STATUS (ENABLE/DISABLE) - Executa/não executa

 

 

USER_OBJECTS.STATUS (VALID/INVALID) - Válida/Inválida (Após a compilação)

 

Se ela estiver ENABLE e VALID é chamada

Se estiver ENABLE e INVALID e compilida

__Se ficar VALID é chamada

__Senão (INVALID) um erro é enviado a query chamadora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O TOAD deveria mostrar qual o erro da Trigger , nunca usei o TOAD não sei se ele tem alguma configuração para não exibi-los.

 

Com a trigger invalid ela não será executada, um erro porém deveria ocorrer.

 

Não conseguindo ver o erro com o TOAD (estranho) tente com o SqlTools ou SqlDeveloper (são livres).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.