Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoa preciso de ajuda, seguinte criei uma trigger no oracle que antes de inserir o registro insere um numero sequencial em outra tabela ou em uma tabela de log caso de erro. Até ai blz a trigger esta perfeita e quando dou um insert pelo banco funciona perfeito. Porém quando dou insert pela aplicaçao delphi a inserção na tabela de controle ou no log não funciona. porém eu sei que a trigger esta sendo executada pois antes da inserção ela pega um valor de sequencia.
alguém pode me ajudar?
comita sim, parece que a trigger não consegue inserir dados na tabela vou colar a trigger aqui.
CREATE OR REPLACE TRIGGER TRG_SSP023
BEFORE INSERT
ON SSP023
REFERENCING OLD AS OLD NEW AS NEW
for each row
DECLARE
vnumbancario varchar2(100);
drf integer;
PRAGMA AUTONOMOUS_TRANSACTION; select sq_ssp023.nextval
into drf
from dual;
:NEW.DRFCODIGO := drf;
for countdis in 0..1000000000 loop
begin
IF (:NEW.DRFBANCO is not null ) AND ( :NEW.DRFNUMBANCARIO is not null) THEN
--DBMS_OUTPUT.PUT_LINE(:NEW.DRFBANCO);
INSERT INTO SSP607A (CONCCONUMERO,CONDRFCODIGO,CONDRFNUMBANCARIO,CONCCOBANCO)
VALUES(:NEW.DRFCONTABOLETO,drf,:NEW.DRFNUMBANCARIO,:NEW.DRFBANCO);
commit;
select condrfnumbancario into vnumbancario from ssp607a where condrfcodigo = drf;
--DBMS_OUTPUT.PUT_LINE('passou');
:NEW.DRFNUMBANCARIO :=vnumbancario;
EXIT WHEN 1=1;
END IF;
EXCEPTION
when others then
null;
end;
end loop;
end;Retire esta linha :
PRAGMA AUTONOMOUS_TRANSACTION
Cara , quando eu tiro essa linha a trigger parece que entra em uma especie de loop infinito
Eu preciso que esse insert na ssp607a seja independente, utilizo essa informação na sequencia do processo.
Pq tem este for de 100000000000 !?
então ai talvez seja minha burrice em ação eu não achei outra maneira de fazer isso , eu preciso que essa trigger tente inserir na ssp607a e caso de exception tente inserir de novo, se eu nao coloco no for ele para as tentativas na primeira entrada no exception. desse jeito ele tenta inserir na ssp607a , caso consigo para o for.
Remova o loop e utilize 'try' e 'exception'
Tem um exemplo de utilização de trigger no oracle, não consegui fazer eu uso try no sql server e funfa normal no oracle não consegui fazer de jeito nenhum
Pessoal, consegui resolver o problema do delphi, mudei a lógica de inserção e acabou dando certo.
Obrigado.
Caso conseguiu achar a resposta para seu problema,mude o topico para "Resolvido", isso ajuda a evitar futuras respostas,e a desorganização do forum.
Até mais!
Sua aplicação "comita" ?