Pegar valor trigger

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Bene
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 06 Jun 2008 9:34 am
Localização: Sorocaba-SP

Ola. Estou com um problema.
Como eu faço para pegar os valores da ultima linha que estou inserindo para jogar para outra tabela?
Estou tentando fazer um trigger mais esta falhando.

Como faço para uma trigger enviar a ultima linha inserida para uma tabela de log?

Obrigado

Rafael R. Machado
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Em tua trigger, jogue o valor de :NEW.CAMPO em uma tabela de log.
Seria isso?
Bene
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 06 Jun 2008 9:34 am
Localização: Sorocaba-SP

Bom dia meu amigo

Então, é exatamente isso que quero fazer só não estou conseguindo fazer.
É bem simples, mais to apanhando aqui.

Eu criei uma tabela de teste, e nela vou jogar o endereço de e-mail que estou inserindo em outra tabela de teste.
Por favor oque esta errado aqui?

a tabela de email é assim
USERID,MAILADDR

na trigger que estou fazendo nesta tabela estou fazendo assim:

Selecionar tudo

CREATE OR REPLACE
TRIGGER TRIGGER1
 AFTER INSERT ON MAIL
 REFERENCING OLD AS old NEW AS new 
BEGIN
  insert into TABEL1 (COLUMN1,COLUMN2) values (:new.USERID, (select sequence1.nextval from dual));
END;
mas resulta sempre neste erro aqui:

Selecionar tudo

Error: ORA-04082: NEW or OLD references not allowed in table level triggers
O que esta errado aqui?

Valeu pela ajuda ai cara, sempre você que responde meus posts uhaua
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, seguem uns exemplos:

Selecionar tudo


CREATE TABLE teste (id number(05), email varchar2(50));

CREATE TABLE teste2 (email VARCHAR2(50));

CREATE OR REPLACE TRIGGER TESTE_TR_01
 AFTER 
 INSERT
 ON TESTE
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW 
BEGIN
 INSERT INTO TESTE2(EMAIL)
  VALUES(:NEW.EMAIL);
END;

INSERT INTO TESTE (id, email) VALUES (1,'paulotrevisolli@ig.com.br');

COMMIT;

SELECT * FROM teste;

SELECT * FROM teste2;
Caso não dê certo, mande pra gente.
Bene
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 06 Jun 2008 9:34 am
Localização: Sorocaba-SP

Estamos quase la cara.

Só tem um probleminha, eu tenho uma sequence que tem que controla os ids da tabela de log.
Como faço pra declarar uma variavel que pode ter o valor dessa sequence?

Exemplo:

Selecionar tudo

CREATE OR REPLACE
TRIGGER TRIGGER1
 AFTER INSERT ON MAIL
 REFERENCING OLD AS old NEW AS new 
 for each row
DECLARE
  IDEvent int;
BEGIN
   IDEvent :=  select sequence1.nextval from dual;

  insert into TABLE1 (COLUMN1,COLUMN2);
  values (IDEvent,:new.USERID);
END;
esse código aqui da erro.
Como declaro variáveis no oracle?

Obrigado pela ajuda cara.

Rafael R. Machado
Sorocaba
Bene
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 06 Jun 2008 9:34 am
Localização: Sorocaba-SP

Consegui aqui pessoal.

Valeu pela ajuda ai

Rafal R. Machado
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Fica aqui um exemplo, para quem possa precisar:

Selecionar tudo

    DECLARE 
      vseq PLS_INTEGER;
    BEGIN
      SELECT TUASEQUENCE.NEXTVAL
        INTO vseq
       FROM dual;
    EXCEPTION
      WHEN OTHERS THEN
        -- Trata tuas exceções aqui...    
    END;  
bvinicius
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 13 Mai 2014 9:20 pm

Boa noite pessoal,

Procurei algum tópico aberto a respeito e o que encontrei mais perto foi esse.

Trabalho como programador e utilizo banco SQL e agora na faculdade estou utilizando banco ORACLE e apanhando bastante rsrs.

A minha dificuldade está no seguinte:

Preciso gravar em um campo a descrição mais o cod sequencial que a sequence gera através do nextval, tentei de varias maneiras:

Atribuindo a uma variavél, ex:

Selecionar tudo

v_num := s_saida.nextval
Concatenando direto no insert ex:

Selecionar tudo

'descricao ' + to_char(s_saida.nextval)
E através de um select também.

Porém é retornado o seguinte erro:

A referência S_SAIDA.NEXTVAL à Tabela, View ou Sequência não permitida neste contexto.

Alguém saberia me dizer , qual a correta forma de se manipular o nextval e concatena-lo com mais alguma informação?

Agradeço desde já.
Renato Menezes Viana
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Sáb, 18 Nov 2006 11:51 am
Localização: Rio de Janeiro - RJ

Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes