Trigger com erro de compilação

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

Fiz essa trigger mas quando vou compilar aparece os erros abaixo, alguém poderia me ajudar?

Selecionar tudo

create or replace
trigger apps.xv_ri_atualiza_conta_contabil
BEFORE INSERT OR UPDATE ON apps.rec_invoice_lines_interface
FOR EACH ROW
declare
new_code_combination (10);
BEGIN 
update apps.rec_invoice_lines_interface
set db_code_combination_id = 28493
 WHERE interface_invoice_id IN (
          SELECT interface_invoice_id
            FROM rec_invoices_interface
           WHERE invoice_num =
                    (select nd.nf_numero from 
                    ecomex.num_documentos nd, ecomex.num_vw_doc_despesas ndd,
                    apps.rec_invoices_interface ri
                    where nd.entidade_id in (86711, 86715)
                    and nd.documento_id = ndd.documento_id
                    and ndd.despesa_codigo = 'FRETE RODO'
                    and nd.organization_code = 'MAM'
                    and nd.nf_numero = ri.invoice_num
                    and nd.organization_code = ri.organization_code
                    and nd.documento_id = :new.documento_id));
END;
Erros:

Selecionar tudo

Error(7,22): PLS-00103: Encountered the symbol "(" when expecting one of the following:     constant exception <an identifier>    <a double-quoted delimited-identifier> table LONG_ double ref    char time timestamp interval date binary national character    nchar The symbol "<an identifier>" was substituted for "(" to continue. 

Error(24,43): PLS-00049: bad bind variable 'NEW.DOCUMENTO_ID'
Agradeço a atenção de todos.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Acho que o erro está aqui:

Selecionar tudo

...
WHERE invoice_num =
                    (select nd.nf_numero from
...
Deveria ser assim:

Selecionar tudo

...
WHERE invoice_num IN
                    (select nd.nf_numero from
...
:-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

Pessoal,

Fiz a alteração citada acima, mas o erro persiste, vocês poderiam me ajudar?

Obrigado,
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

Boa tarde,

Poderia colocar a tua trigger alterada aqui pra gente ver se consegue ajudá-la?
Muito obrigado.
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

Ai está, já com a alteração:

Selecionar tudo

create or replace
trigger apps.xv_ri_atualiza_conta_contabil
BEFORE INSERT OR UPDATE ON apps.rec_invoice_lines_interface
FOR EACH ROW
declare
new_code_combination (10);
BEGIN 
update apps.rec_invoice_lines_interface
set db_code_combination_id = 28493
 WHERE interface_invoice_id IN (
          SELECT interface_invoice_id
            FROM rec_invoices_interface
           WHERE invoice_num in
                    (select nd.nf_numero from 
                    ecomex.num_documentos nd, ecomex.num_vw_doc_despesas ndd,
                    apps.rec_invoices_interface ri
                    where nd.entidade_id in (86711, 86715)
                    and nd.documento_id = ndd.documento_id
                    and ndd.despesa_codigo = 'FRETE RODO'
                    and nd.organization_code = 'MAM'
                    and nd.nf_numero = ri.invoice_num
                    and nd.organization_code = ri.organization_code
                    and nd.documento_id = :new.documento_id));
END;
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

Boa tarde,

Dá uma olhada nesta declaração de variável:

Selecionar tudo

 new_code_combination (10); 
Está faltando o Datatype.
Pelo que vi, você não utiliza esta variável na trigger.
Se puder eliminá-la da declaração ou, declarar teu datatype acho que corrige teu problema.

Qualquer coisa, manda pra gente.
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

Pessoal, fiz algumas alterações e consegui tirar um erro, agora somente tem o erro do NEW, troquei o NEW por 123 e compilou, como posso mudar essa parte?

Selecionar tudo

create or replace
trigger apps.xv_ri_atualiza_conta_contabil
BEFORE INSERT OR UPDATE ON apps.rec_invoice_lines_interface
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
new_code_combination NUMBER;
BEGIN 
update apps.rec_invoice_lines_interface
set db_code_combination_id = 28493
 WHERE interface_invoice_id IN (
          SELECT interface_invoice_id
            FROM rec_invoices_interface
           WHERE invoice_num in
                    (select nd.nf_numero from 
                    ecomex.num_documentos nd, ecomex.num_vw_doc_despesas ndd,
                    apps.rec_invoices_interface ri
                    where nd.entidade_id in (86711, 86715)
                    and nd.documento_id = ndd.documento_id
                    and ndd.despesa_codigo = 'FRETE RODO'
                    and nd.organization_code = 'MAM'
                    and nd.nf_numero = ri.invoice_num
                    and nd.organization_code = ri.organization_code
                    and nd.documento_id = 123));
END;
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

Pessoal, consegui resolver, muito obrigado pela ajuda.

Selecionar tudo

create or replace
trigger apps.xv_ri_atualiza_conta_contabil
BEFORE INSERT OR UPDATE ON apps.rec_invoice_lines_interface
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
new_code_combination NUMBER;
BEGIN 
UPDATE apps.rec_invoice_lines_interface
   SET db_code_combination_id = 28493
 WHERE interface_invoice_id IN (
          SELECT interface_invoice_id
            FROM apps.rec_invoices_interface
           WHERE invoice_num IN (
                    SELECT nd.nf_numero
                      FROM ecomex.num_documentos nd,
                           ecomex.num_vw_doc_despesas ndd,
                           apps.rec_invoices_interface ri
                     WHERE nd.entidade_id IN (86711, 86715)
                       AND nd.documento_id = ndd.documento_id
                       AND ndd.despesa_codigo = 'FRETE RODO'
                       AND nd.organization_code = 'MAM'
                       AND nd.nf_numero = ri.invoice_num
                       AND nd.organization_code = ri.organization_code)
             AND apps.rec_invoices_interface.interface_invoice_id =
                         :new.interface_invoice_id);
END;
Responder
  • Informação
  • Quem está online

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