Tratamento de modificações em tabelas de banco de dados

Objectives

After completing this lesson, you will be able to:
  • Descrever o ajuste de tabelas de banco de dados.
  • Ajustar modificações diretas a tabelas de banco de dados.
  • Descreva o processo de conversão para tabelas de banco de dados.
  • Ajustar modificações indiretas em tabelas de banco de dados.

Ajuste de tabelas de banco de dados

Se uma modificação no dicionário afetar uma tabela de banco de dados, direta ou indiretamente, essa modificação deve ser aplicada à tabela de banco de dados. Isso é chamado de ajuste da tabela de banco de dados.

Existem três abordagens diferentes para ajustar a tabela de banco de dados:

ALTER TABLE

Usando esta instrução SQL, a ferramenta Dictionary pode modificar (alterar) o layout da tabela no banco de dados. Os dados na tabela são ajustados, se necessário. No entanto, nem todas as modificações podem ser implementadas usando ALTER TABLE. Em particular, as modificações que implicam o risco de perdas de dados ou erros de conversão não são implementadas com ALTER TABLE.

Excluir e criar

Esta é a abordagem mais simples. O objeto de banco de dados é excluído e criado novamente com base na definição modificada. Esta é uma boa ideia se a tabela estiver vazia ou se os dados armazenados na tabela forem redundantes.

Conversão de tabela

Neste procedimento, a tabela é criada primeiro no banco de dados com um novo nome. Em seguida, os dados são copiados da tabela antiga para a nova tabela, convertendo-os, se necessário. Por fim, a tabela antiga é excluída e a nova tabela é renomeada para substituir a tabela antiga.

Durante uma conversão de tabela, é possível uma perda parcial de dados, por exemplo, quando você remove um campo de tabela ou reduz o respectivo comprimento. Podem ocorrer erros em tempo de execução se você modificar a chave primária ou o tipo de um campo de tabela existente.

Ativação de modificações - Árvore de decisão

Assista ao vídeo para saber mais sobre como ativar modificações.

Como executar e analisar modificações diretas

Assista ao vídeo para ver como executar e analisar modificações diretas em uma tabela de banco de dados.

Conversão de uma tabela de banco de dados

Se não for possível implementar suas modificações no banco de dados durante a ativação, o editor exibe a mensagem de erro "TABLE <...> was not activated".

Para ver mais detalhes, clique com o botão direito do mouse em qualquer lugar no texto fonte e selecione Abrir com→log do dicionário.

A visão Log Dictionary informa que ALTER TABLE não é possível e exibe a mensagem de erro Structure change at field level (convert table <...> ).

Você executa a conversão manual usando uma correção rápida. No editor, clique com o botão direito do mouse no nome da tabela e selecione Correção rápida. Em alternativa, posicione o cursor no nome da tabela e pressione Ctrl + 1. Existem duas correções rápidas para ajustar e ativar uma tabela de banco de dados:

Ajustar e ativar tabela de banco de dados, converter dados

Selecione esta correção rápida se você quiser manter e converter seus dados. Na maioria das situações, esta será a opção certa.

Ajustar e ativar tabela de banco de dados, eliminar dados

Selecione esta correção rápida se os dados na tabela não forem mais necessários.

Evite usar a correção rápida Excluir tabela no banco de dados. Isso remove a tabela do banco de dados. Depois disso, qualquer acesso à tabela falhará até você ativar a tabela de banco de dados no dicionário novamente.

Nota

Ter um erro de ativação não é um pré-requisito para usar essas correções rápidas. Em princípio, você pode ajustar ou excluir uma tabela no banco de dados a qualquer momento, desde que tenha autorizações suficientes.

Quando você seleciona Ajustar uma tabela de banco de dados ativa, converter dados, a visão Assistente rápido será aberta automaticamente abaixo da janela do editor. Na seção à esquerda, você pode acionar a mesma correção rápida ou outra correção rápida novamente. A seção à direita permite que você analise o último ajuste mais detalhadamente. Aqui você encontra a hora de início do último ajuste e um link para o log de ajuste BD detalhado.

O log de ajuste BD contém informações detalhadas sobre como a tabela foi ajustada. É particularmente útil quando algo dá errado durante o processo de conversão.

Antes de discutirmos com mais detalhes o que acontece exatamente durante uma conversão de tabela, assista ao vídeo a seguir para ver o ajuste de uma tabela de banco de dados.

Como converter uma tabela de banco de dados

Assista ao vídeo para ver como converter uma tabela de banco de dados.

O processo de conversão (passo a passo)

Assista ao vídeo para saber mais sobre o processo de conversão.

Ajuste de modificações indiretas em tabelas de banco de dados

Anteriormente, discutimos como a tabela de banco de dados precisava ser ajustada após uma modificação direta da definição de tabela no ABAP Dictionary. Agora queremos dar uma olhada nas mudanças indiretas.

Um exemplo para uma modificação indireta desse tipo é uma modificação do tipo básico de um domínio, que descreve um campo da tabela de banco de dados. Outro exemplo é a substituição do domínio utilizado em um elemento de dados. Se a tabela incluir uma estrutura, uma modificação da estrutura include também afeta a tabela no banco de dados.

Quando você ativa um objeto Dictionary, a ferramenta também ajusta todos os objetos dependentes. No entanto, se uma tabela de banco de dados for afetada, a ferramenta interrompe a ativação com a mensagem de erro Domain <...> cannot be activated due to dependent tables. Este erro é independente da questão, se é possível ajustar diretamente as tabelas de banco de dados afetadas ou se é necessária uma conversão manual.

No exemplo, o domínio ZS4D430_DEPARMENT_ID é utilizado indiretamente na definição de tabela ZS4D430_EMPLOYEE. Após uma modificação de comprimento de 20 para 40, a ativação falha com a mensagem de erro exibida, embora a ampliação de comprimento de um campo possa ser ajustada usando ALTER TABLE.

A mensagem de erro vem com uma correção rápida. Para chamar a correção rápida, clique com o botão direito do mouse na mensagem de erro na visão Problemas. Como alternativa, clique com o botão esquerdo do mouse na mensagem de erro e pressione Ctrl + 1. Na janela de correção rápida que é aberta, selecione Concluir.

O resultado da correção rápida é exibido na visão Assistente rápido. A ativação é efetuada com êxito se tiver sido possível ajustar todas as tabelas dependentes usando ALTER TABLE ou Excluir e criar.

A ativação falha se pelo menos uma das tabelas dependentes necessitar de ajuste manual. Verifique o log de ativação para identificar as tabelas de banco de dados afetadas e ajustá-las manualmente como fizemos anteriormente.

Dica

Depois de ajustar todas as tabelas dependentes, retorne ao objeto Dictionary que você modificou diretamente e certifique-se de que ele está no status Ativo. Em nosso exemplo, este é o domínio ZS4D430_DEPARTMENT_ID.

Como ativar uma modificação indireta

Assista ao vídeo para ver como ativar uma modificação indireta em uma tabela de banco de dados.

Tratar modificações em uma tabela de banco de dados

Você precisa efetuar modificações na lista de campos de uma tabela de banco de dados que já contém dados. Dependendo da natureza da modificação, o sistema solicita que você ajuste a tabela.

Modelo:

  • /LRN/EMPLOY (Definição de tabela de banco de dados)

Solução:

  • /LRN/EMPLOY_DEP (Definição de tabela de banco de dados)
  • /LRN/DEPARTMENT_ID (elemento de dados)
  • /LRN/DEPARTMENT_ID (domínio)

Tarefa 1: Copiar modelo (opcional)

Copie a definição de tabela de banco de dados modelo. Se você tiver concluído o exercício anterior, pode ignorar esta tarefa e continuar editando sua tabela de banco de dados Z##EMPLOY.

Etapas

  1. Copie a definição de tabela do banco de dados /LRN/EMPLOY para seu próprio pacote (nome sugerido: Z##EMPLOY, onde ## representa seu número de grupo).

    1. Na visão Project Explorer, clique com o botão direito do mouse na definição de tabela do banco de dados /LRN/EMPLOY para abrir o menu de contexto.

    2. No menu de contexto, selecione Duplicar ....

    3. Insira o nome do seu pacote no campo Pacote. No campo Nome, insira o nome Z##EMPLOY, onde ## representa seu número de grupo.

    4. Confirme a ordem de transporte e selecione Concluir.

  2. Ative a cópia.

    1. Pressione Ctrl + F3 para ativar a definição da tabela de banco de dados.

Tarefa 2: Tratar modificações diretas

Na lista de campos da sua tabela de banco de dados, adicione um novo campo (nome sugerido: DEPARTMENT_ID) e digite-o com tipo integrado CHAR e comprimento 40. Depois de ativar a tabela com o novo campo, reduza o comprimento do campo para 20 e ajuste a tabela no banco de dados.

Etapas

  1. Antes do campo ANNUAL_SALARY, adicione um novo campo (nome sugerido: DEPARTMENT_ID) e digite-o com tipo criado em CHAR e comprimento 40.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345678
      birth_date : z##birth_date; entry_date : z##entry_date; department_id : abap.char(40); @Semantics.amount.currencyCode : 'z##employ.currency_code' annual_salary : z##annual_salary; currency_code : waers;
  2. Ative a definição de tabela de banco de dados.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

  3. Exiba o log do Dictionary para a tabela.

    1. Clique com o botão direito do mouse em qualquer lugar no código-fonte e selecione Abrir com→log do dicionário.

    2. Navegue até a guia Registro do dicionário que é exibida abaixo do editor.

    3. Mantenha pressionada a tecla Ctrl e clique na linha que começa com Ver log.

    4. Na barra de ferramentas da guia Log do dicionário, selecione Mostrar barra de ferramentas de pesquisa.

    5. Insira o nome da sua tabela de banco de dados no campo Procurar: e pressione Enter.

    6. A estratégia de atualização é mencionada após a linha Ajustar tabela no BD >>>.

  4. Reduza o comprimento do novo campo de 40 para 20.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345678
      birth_date : z##birth_date; entry_date : z##entry_date; department_id : abap.char(20); @Semantics.amount.currencyCode : 'z##employ.currency_code' annual_salary : z##annual_salary; currency_code : waers;
  5. Ative a definição de tabela de banco de dados.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

  6. Analise o log ABAP.

    1. Na caixa de diálogo com a mensagem de erro, selecione Abrir log ABAP para exibir o log Dictionary.

    2. Na guia Log do dicionário, mantenha pressionada a tecla Ctrl e clique na linha que começa com Ver log.

    3. Na barra de ferramentas da guia Log do dicionário, selecione Mostrar barra de ferramentas de pesquisa.

    4. Insira o nome da sua tabela de banco de dados no campo Procurar: e pressione Enter.

    5. A estratégia de atualização é mencionada após a linha Ajustar tabela no BD >>>.

  7. Utilize a correção rápida para converter o conteúdo da sua tabela de banco de dados.

    1. Navegue para o texto fonte da sua definição de tabela de banco de dados.

    2. Na linha de código que começa com define table, posicione o cursor no nome da tabela e pressione Ctrl + 1 para chamar a correção rápida.

    3. A partir da lista de soluções rápidas disponíveis, selecione Ajustar e ative a tabela de banco de dados e converta dados.

Tarefa 3: Tratar modificações indiretas

Substitua o tipo com programação incondicional por um novo elemento de dados (nome sugerido: Z##_DEPARTMENT_ID, onde ## é o seu número de grupo) que usa um novo domínio ((nome sugerido: Z##_DEPARTMENT_ID). No domínio, utilize o tipo técnico CHAR com um comprimento de 20. Após ativar a tabela de banco de dados, modifique o comprimento no domínio para 10. Em seguida, ative e ajuste a tabela de banco de dados.

Etapas

  1. Na sua definição de tabela de banco de dados, substitua abap.char(20) por Z##_DEPARTMENT_ID e utilize uma solução rápida para criar o novo elemento de dados.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345678
      birth_date : z##_birth_date; entry_date : z##_entry_date; department_id : z##_department_id; @Semantics.amount.currencyCode : 'z##employ_dep.currency_code' annual_salary : z##_annual_salary; currency_code : waers;
    2. Clique em z##_department_id e pressione Ctrl + 1 para abrir o menu de solução rápida.

    3. No menu de solução rápida, clique duas vezes em Criar elemento de dados ....

    4. Confirme o pacote e o nome, insira uma descrição, por exemplo, Identificação do departamento e selecione Seguinte.

    5. Atribua o novo objeto a uma ordem de transporte e selecione Concluir.

    6. Em Nome do tipo, insira Z##_DEPARTMENT_ID e insira os seguintes denominadores de campo:

      CampoValor
      CurtoDep.
      MédioDepartamento
      LongoID do departamento
      TítuloID do departamento
  2. Grave o elemento de dados. Em seguida, utilize a navegação para frente para criar o domínio com o tipo técnico CHAR e um comprimento de 20.

    1. Pressione Ctrl + S para salvar o elemento de dados.

    2. Escolha o rótulo Nome do tipo: para começar a criar o domínio.

    3. Confirme o pacote e o nome, insira uma descrição, por exemplo, Identificação do departamento e selecione Seguinte.

    4. Atribua o novo objeto a uma ordem de transporte e selecione Concluir.

    5. Insira CHAR como Tipo de dados e 20 como Comprimento.

  3. Salve o domínio. Em seguida, ative o domínio, o elemento de dados e a definição de tabela de banco de dados.

    1. Pressione Ctrl + S para salvar o domínio.

    2. Selecione Ativar objetos de desenvolvimento ABAP inativos. Como alternativa, pressione Ctrl + Shift + F3.

    3. Selecione Selecionar tudo e, em seguida, Ativar.

  4. No seu domínio para o ID de departamento, reduza o comprimento técnico e o comprimento de exibição de 20 para 10.

    1. Navegue para seu domínio Z##_DEPARTMENT_ID.

    2. Modifique o valor no campo Comprimento de 20 para 10.

    3. Remova o valor no campo Comprimento de saída (isso será preenchido automaticamente durante a ativação).

  5. Tente ativar o domínio e analise as mensagens na visão Problemas.

    1. Pressione Ctrl + F3 para ativar o domínio.

    2. Abra a visão Problemas abaixo do editor para exibir as mensagens de erro.

  6. Use a correção rápida para a mensagem de erro Domínio ... não pode ser ativado devido a tabelas dependentes.

    1. Na visão Problemas, posicione o cursor na mensagem de erro que começa com Domínio ... e pressione Ctrl + 1 para chamar a correção rápida.

    2. Selecione Concluir.

    3. Na seção Resultado anterior na parte inferior direita, selecione Log de ativação para analisar o log de ativação.

  7. Utilize uma correção rápida para ajustar e converter a tabela de banco de dados dependente, ou seja, sua tabela de banco de dados Z##EMPLOY.

    1. Navegue para o texto fonte da sua definição de tabela de banco de dados.

    2. Na linha de código que começa com define table, posicione o cursor no nome da tabela e pressione Ctrl + 1 para chamar a correção rápida.

    3. A partir da lista de soluções rápidas disponíveis, selecione Ajustar e ative a tabela de banco de dados e converta dados.

  8. Ative o domínio para o código do departamento.

    1. Navegue para a definição do seu domínio para o código do departamento.

    2. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.