Jump to content
Sign in to follow this  
Adauto Junior_64247

Trigger Oracle não funciona no Delphi 7

Recommended Posts

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?

Share this post


Link to post
Share on other sites

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;
begin
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;

Share this post


Link to post
Share on other sites

Retire esta linha :

 

 

PRAGMA AUTONOMOUS_TRANSACTION

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Felipe_N22
      Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
    • By Abran
      Gostaria de poder fazer um SELECT dentro do LOOP igual ao exemplo abaixo.
      Esse exemplo não deu certo, se tirar esse SELECT que está dentro do LOOP, tudo funciona. O problema está no Select dentro do LOOP que nao aceita.
      ORA-01403: dados não encontrados
       
      A ideia é, Z45 grava cliente, e Z46 grava títulos em aberto.

      Toda vez que rodar, deverá checar se existe novos títulos que ainda não foram gravados, e só gravar os que ainda não foram.
       
      Alguem sabe alguma maneira de fazer o que preciso ?
       
      DECLARE      v_CODCLI   VARCHAR2 (6);   vPREFIXO   VARCHAR2 (3);   vNUM       VARCHAR2 (9);   vPARCELA   VARCHAR2 (3); BEGIN          v_CODCLI := '0';          FOR V_FUNC IN     (     SELECT E1_FILIAL, A1_COD, A1_LOJA, A1_PESSOA, E1_PREFIXO, E1_NUM, E1_PARCELA, E1_TIPO, E1_NATUREZ, E1_EMISSAO, E1_VENCREA, E1_VALOR,     CASE WHEN TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') < 0              THEN 0        ELSE TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') END ATRASO      FROM SE1010 SE1      INNER JOIN SA1010 A1 ON A1.A1_COD = E1_CLIENTE AND A1_LOJA = E1_LOJA AND A1.D_E_L_E_T_ = SE1.D_E_L_E_T_      WHERE SE1.D_E_L_E_T_ = ' '      ORDER BY A1_LOJA, A1_COD     )     LOOP                  SELECT Z46_PREFIX, Z46_NUM, Z46_PARCEL, Z46_TIPO, Z46_NATURE          INTO vPREFIXO, vNUM, vPARCELA, vTIPO, vNATUREZ          FROM Z46010 Z46          WHERE Z46_PREFIX = V_FUNC.E1_PREFIXO         AND Z46_NUM = V_FUNC.E1_NUM          AND Z46_PARCEL = V_FUNC.E1_PARCELA         AND D_E_L_E_T_ = ' ' ;                          IF vPREFIXO || vNUM || vPARCELA !=  V_FUNC.E1_PREFIXO || V_FUNC.E1_NUM || V_FUNC.E1_PARCELA THEN                      IF V_FUNC.A1_COD <> v_CODCLI THEN                              v_CODCLI :=  V_FUNC.A1_COD;                                  INSERT                 INTO DADOSADV.Z45010                 (                     Z45_RECNO,                     Z45_FILIAL,                     Z45_CODCLI,                     Z45_LOJA,                     Z45_PESSOA,                     Z45_DTCAD                 )                 VALUES                 (                     (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) + 1 END Z45_RECNO FROM Z45010) ,                     V_FUNC.E1_FILIAL,                     V_FUNC.A1_COD,                     V_FUNC.A1_LOJA,                     V_FUNC.A1_PESSOA,                     TO_CHAR(SYSDATE, 'YYYYMMDD')                 );                                  COMMIT;                          END IF;                          INSERT             INTO DADOSADV.Z46010             (                     Z46_RECNO,                     Z46_RECZ45,                     Z46_STATIT,                     Z46_PREFIX,                     Z46_NUM,                     Z46_PARCEL,                     Z46_TIPO,                     Z46_NATURE,                     Z46_VALOR,                     Z46_ATRASO,                     Z46_DTCAD             )             VALUES             (                 (SELECT CASE WHEN MAX(Z46_RECNO) IS NULL THEN 1 ELSE MAX(Z46_RECNO) + 1 END Z46_RECNO FROM Z46010) ,                 (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) END Z45_RECNO FROM Z45010),                 0,                 V_FUNC.E1_PREFIXO,                 V_FUNC.E1_NUM,                 V_FUNC.E1_PARCELA,                 V_FUNC.E1_TIPO,                 V_FUNC.E1_NATUREZ,                 20,                 V_FUNC.ATRASO,                 TO_CHAR(SYSDATE, 'YYYYMMDD')             );                          COMMIT;                              END IF;          END LOOP;           END;
    • By Angelo_Pacheco
      Olá Pessoal!
      Faz tempo que não trabalho com BD e trigger e estou retornando.
      Estou com a seguinte situação
       
      Tenho 2 tabelas:
      glpi_tickets e glpi_plugin_fields_ticketoramentos
       
      Dentro do formulario ticket (tabela glpi_tickets) criei um campo otimizado chamado reprovado (tabela 
      glpi_plugin_fields_ticketoramentos) A tabela  glpi_plugin_fields_ticketoramentos se relaciona com glpi_tickets
       
      A situação é que se o usuario reprova o ticket, o mesmo terá de ser fechado.
       
      Estou montando a trigger
      CREATE TRIGGER TRG_fechaChamado
      AFTER  UPDATE
      ON glpi_tickets 
      FOR each row
      BEGIN
        
        SELECT g.reprovadofield 
               into @repro  
                    FROM  glpi_tickets t,
                         glpi_plugin_fields_ticketoramentos g
                    WHERE t.id = g.items_id
                    AND   g.reprovadofield = 0
                    AND   t.id = ????
                    
                           
          if @repro = 0 THEN
          
            UPDATE glpi_tickets SET status = 6 WHERE id ????
          
          END IF;
          
      END;
       
      Não estou conseguindo pegar o id do ticket a ser analisado para fechamento.
       
      Podem me ajudar??
       
       
       
       
       
    • By felipeaggs
      Boa-tarde, pessoal!
       
      Estou com um problema e não consigo resolvê-lo de forma alguma.
       
      Vou exemplificar aqui o que acontece.
       
      Tenho duas tabelas, uma tabela é relativa a registro de nota fiscal, estruturada da seguinte forma (edição simplificada).
       
      TGFCAB
      ID | DTNEG        | NUMNOTA | CODTIPOPER | CODEMP | 
      1 | 01/01/2019 | 1000            | 50                     | 7              |
      2 | 02/01/2019 | 1001            | 50                     | 7              |
      3 | 02/01/2019 | 1002            | 50                     | 7              |
      4 | 03/01/2019 | 1003            | 50                     | 7              |
       
      TGFITE
      ID | NUMNOTA | QTDNEG| VLRUNIT | VLRTOT | CODVOL | PRODUTONFE 
      1   |1001            | 5              | 10            | 50            | UN           | 10
      2   |1001            | 10            | 700          | 7000        | TN           | 11
      3   |1002            | 3              | 20            |60            | UN           | 12
      4   |1003            | 20            | 7              | 140          | UN           | 10
      5   |1003            | 100          | 7              | 700          | UN           | 10
       
       
      Eu preciso realizar um select de forma que traga as Informação abaixo.
       
      PRODUTO| QTDNEGMES | VALORTOTAL 
      10             | 125           | 890
      11             | 10             | 7000
      12             | 3               | 60
       
      Já tentei de todas as formas possíveis, porém eu não consigo de forma alguma.
       
      Por favor, alguém poderia me ajudar?
       
       
       
       
    • By asacap1000
      Galera estou com uma consulta que travei em uma situação.
      Eu preciso buscar as ultimas informações de uma Nota fiscal.
       
      NUMERO DA NF | DATA FATURAMENTO | COBERTURA
       
      neste select ele utiliza como parâmetro o lote cadastrado no sistema de estoque, e ao pesquisar ele volta a Data do faturamento e cobertura corretos porém o numero da NF é outro bem antiga.
      O que posso estar fazendo errado nesta consulta?? segue a query 
      SELECT TO_CHAR(MAX(OS.NR_NF)) NOTA, TO_CHAR(MAX(TO_DATE(REPLACE(OS.DATE_BILL, '/.', ''), 'dd/mm/yy')), 'dd/mm/yyyy') DATA_FAT, TO_CHAR(MAX(TO_DATE(REPLACE(IT.DIV_6, '/.', ''), 'dd/mm/yy')), 'dd/mm/yyyy') COBERTURA FROM BILL_OS_ITEM IT, BILL_OS OS, BILL_ITEM B WHERE OS.LAGER = IT.LAGER AND OS.ID_KLIENT = IT.ID_KLIENT AND OS.ID_OS = IT.ID_OS AND IT.LAGER = OS.LAGER AND IT.ID_OS = OS.ID_OS AND IT.BILLITE = B.BILLITE AND OS.STATUS <> '80' --AND OS.NR_NF = '119247' AND IT.DIV_1 = 'EX16208816' A nota fiscal que deveria retornar ´seria a 119247, porém vem  99336.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.