Trigger Update por Linhas C/ Duas Tabelas

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
mafrancisco
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 17 Jul 2008 12:56 pm
Localização: Santo André - SP

Prezados(as),

Sou iniciante em PL/SQL, preciso criar uma trigger com a seguinte situação, quando o campo CFOP da tabela "ra_customer_trx_lines_all" for igual à 7127 o campo EXPORT_DRAWBACK_NUMBER da tabela "JL_BR_CUST_TRX_LINES_EXTS" deverá ser atualizado com uma determinada informação, preciso fazer isso linha a linha quando essa condição ocorrer, por gentileza, poderiam me ajudar?

Abs.
bispovj
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 13 Abr 2010 8:44 pm
Localização: Porto Alegre - RS

Olá,
Não conheço a estrutura de suas tabelas mas basicamente poderia ser feito da seguinte forma:

Selecionar tudo

CREATE OR REPLACE TRIGGER << nome da sua trigger >>
  /*Sou iniciante em PL/SQL, preciso criar uma trigger com a seguinte situação,
  quando o campo CFOP da tabela "ra_customer_trx_lines_all" for igual à 7127
  o campo EXPORT_DRAWBACK_NUMBER da tabela "JL_BR_CUST_TRX_LINES_EXTS"
  deverá ser atualizado com uma determinada informação, preciso fazer isso linha a linha
  quando essa condição ocorrer, por gentileza, poderiam me ajudar?*/
  BEFORE INSERT OR UPDATE ON ra_customer_trx_lines_all
  REFERENCING NEW AS NEW OLD AS OLD
  FOR EACH ROW
BEGIN
  IF :new.cfop = '7127' THEN
    BEGIN
      UPDATE jl_br_cust_trx_lines_exts
         SET export_drawback_number = '<<determinada informação>>'
       WHERE chave = :new.chave;-- nesta parte deve haver a lógica de junção das tabelas
    EXCEPTION
      WHEN OTHERS THEN
        raise_application_error(-20000, SQLERRM);
    END;
  END IF;
END;
Em << nome da sua trigger >> você coloca o nome de acordo com sua padronização.
mafrancisco
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 17 Jul 2008 12:56 pm
Localização: Santo André - SP

Olá,

Meu amigo eu criei a trigger como está abaixo baseado na sua sugestão mas não funcionou, tem idéia do que possa ser?

CREATE OR REPLACE TRIGGER XV_TESTE_DRW
/*Sou iniciante em PL/SQL, preciso criar uma trigger com a seguinte situação,
quando o campo CFOP da tabela "ra_customer_trx_lines_all" for igual à 7127
o campo EXPORT_DRAWBACK_NUMBER da tabela "JL_BR_CUST_TRX_LINES_EXTS"
deverá ser atualizado com uma determinada informação, preciso fazer isso linha a linha
quando essa condição ocorrer, por gentileza, poderiam me ajudar?*/

Selecionar tudo

BEFORE INSERT OR UPDATE ON ra_customer_trx_lines_all
  REFERENCING NEW AS NEW OLD AS OLD
  FOR EACH ROW
BEGIN
  IF :new.global_attribute1 = '7127' THEN
    BEGIN
      UPDATE jl_br_cust_trx_lines_exts
         SET export_drawback_number = '20170056899'
       WHERE customer_trx_id = :new.customer_trx_id;-- nesta parte deve haver a lógica de junção das tabelas
    EXCEPTION
      WHEN OTHERS THEN
        raise_application_error(-20000, SQLERRM);
    END;
  END IF;
END;
Responder
  • Informação