Ir para conteúdo
Fórum Script Brasil
  • 0

Corrigir erro 00302


Orlando cawende

Pergunta

CREATE OR REPLACE TRIGGER T_GERA_ENDERECO_AFTER AFTER INSERT ON pessoa
 
DECLARE
   -- cria o tipo para variável que armazena o conteúdo do package
   TYPE tbPessoaPackage IS TABLE OF pessoa%ROWTYPE INDEX BY BINARY_INTEGER;
   tbPessoa   tbPessoaPackage;
   x           BINARY_INTEGER; --indice
 
 BEGIN
   -- atribui ao índice o primeiro valor do package
   x := pkg_pessoa.vPessoa.FIRST;
   -- limpa a var criada
   tbPessoa.DELETE;
 
   -- adiciona todos os registros do package na variável criada
   WHILE x IS NOT NULL LOOP
     tbPessoa(x).id_pessoa := pkg_pessoa.vPessoa(x).id_pessoa;
     tbPessoa(x).nome_pessoa := pkg_pessoa.vPessoa.nome_pessoa;
     tbPessoa(x).id_endereco := pkg_pessoa.vPessoa.id_endereco;
     x := pkg_pessoa.vPessoa.NEXT(x); -- incrementa o valor do índice
   END LOOP;
 
   pkg_pessoa.vPessoa.DELETE; -- limpa o package
   x := tbPessoa.FIRST; -- atribui ao índice o primeiro valor
 
   -- loop para percorrer todos os registros do package
   WHILE x IS NOT NULL LOOP
     -- insert na tabela endereco, com o nome da rua sendo Rua + nome da pessoa (ex: Rua do Felisberto)
     BEGIN
       INSERT INTO endereco (id_endereco,lograddouro) values (seq_endereco.nextval, 'Rua do ' || tbPessoa(x).nome_pessoa);
     EXCEPTION
       WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20001
                                ,'Não foi possível inserir os dados na tabela ENDERECO. Trigger: T_GERA_ENDERECO_AFTER ' || SQLERRM);
     END;
     -- update na tabela Pessoa, para setar o valor do id_endereco da Pessoa com o valor do id do endereço gerado no insert acima
     BEGIN
       UPDATE pessoa p SET p.id_endereco = seq_endereco.currval
        WHERE p.id_pessoa = tbPessoa(x).id_pessoa;
     EXCEPTION
       WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20002
                                ,'Não foi possível atualizar os dados na tabela PESSOA. Trigger: 
                                T_GERA_ENDERECO_AFTER ' || SQLERRM);
     END;
     -- atualiza valor do indice para o proximo registro
     x := tbPessoa.NEXT(x);
   END LOOP;
 
 END;

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...