- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 11 anos, 10 meses atrás por jurupoc.
-
AutorPosts
-
3 de janeiro de 2013 às 4:25 pm #104971jurupocParticipante
Bom dia!
Pessoal será que alguem pode me ajudar, estou com o seguinte problema: Preciso inserir dados em outra tabela de log apenas 1 vez independente da quantidade de registros que foram alterados. o problema é que quando o retiro FOR EACH ROW não está compilando a procedure.
Verifiquei tbm que quando a TRIGGER é do tipo statement não podemos utilizar new nem old será que existe uma maneira:Obrigado!
CREATE OR REPLACE TRIGGER INT_TABELA_NOTA_ENTRADA
AFTER
INSERT OR DELETE OR UPDATE
ON TABELA_NOTA_ENTRADA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
ID INTEGER;
BEGINIF INSERTING THEN
SELECT
INT_NOTA_ENTRADA_ID.NEXTVAL
INTO
ID
FROM
DUAL;INSERT
INTO
INT_NOTA_ENTRADA (
SEQUENCIAL,
ID_CNE_NUMERO,
ID_SER_NOTA,
ID_LJA_CODIGO,
ID_CLF_CODIGO,
TIPO,
STATUS)
VALUES (
ID,
:NEW.CNE_NUMERO,
:NEW.SER_NOTA,
:NEW.LJA_CODIGO,
:NEW.CLF_CODIGO,
'U',
'N');
END IF;IF UPDATING THEN
SELECT
INT_NOTA_ENTRADA_ID.NEXTVAL
INTO
ID
FROM
DUAL;INSERT
INTO
INT_NOTA_ENTRADA (
SEQUENCIAL,
ID_CNE_NUMERO,
ID_SER_NOTA,
ID_LJA_CODIGO,
ID_CLF_CODIGO,
TIPO,
STATUS)
VALUES (
ID,
:OLD.CNE_NUMERO,
:OLD.SER_NOTA,
:OLD.LJA_CODIGO,
:OLD.CLF_CODIGO,
'U',
'N');
END IF;IF DELETING THEN
SELECT
INT_NOTA_ENTRADA_ID.NEXTVAL
INTO
ID
FROM
DUAL;INSERT
INTO
INT_NOTA_ENTRADA (
SEQUENCIAL,
ID_CNE_NUMERO,
ID_SER_NOTA,
ID_LJA_CODIGO,
ID_CLF_CODIGO,
TIPO,
STATUS)
VALUES (
ID,
:OLD.CNE_NUMERO,
:OLD.SER_NOTA,
:OLD.LJA_CODIGO,
:OLD.CLF_CODIGO,
'D',
'N');
END IF;END;
3 de janeiro de 2013 às 4:48 pm #104972rmanParticipante@jurupoc
Está meio confuso, você ao mesmo tempo não quer utilizar o FOR EACH ROW e quer utilizar o NEW e OLD. 😯
Não entendi.
Fica a dica, é possível utilizar a sequence diretamente, sem a necessidade de uma variável.
Exemplo:
INSERT
INTO
INT_NOTA_ENTRADA (
SEQUENCIAL,
ID_CNE_NUMERO,
ID_SER_NOTA,
ID_LJA_CODIGO,
ID_CLF_CODIGO,
TIPO,
STATUS)
VALUES (
INT_NOTA_ENTRADA_ID.NEXTVAL,
:NEW.CNE_NUMERO,
:NEW.SER_NOTA,
:NEW.LJA_CODIGO,
:NEW.CLF_CODIGO,
'U',
'N');
3 de janeiro de 2013 às 5:32 pm #104973jurupocParticipante@Rman,
valeu pela dica! na verdade eu preciso dos valores old e new mas eu gostaria de inserir o log apenas uma vez para cada transação. Ficou mais claro?
3 de janeiro de 2013 às 7:26 pm #104974Fábio PradoParticipante@jurupoc,
Não há como utilizar os valores old e new em triggers de instrução. O que dá para fazer é uma “gambi” criando uma trigger de linha e verificando se a linha correspondente já existe na outra tabela. Se existir, não faça nada! Dessa forma vc irá inserir os dados uma única vez, simulando uma trigger de instrução.
[]s
Fábio Prado
http://www.fabioprado.net4 de janeiro de 2013 às 10:27 pm #104977jurupocParticipanteFábio Prado,
Fiz a “gambi” e deu certo!! valeu!!!
Abraços!!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.