"
Apoiado por

INSERT dbtab ACCEPTING DUPLICATE KEYS

Quando tentas inserir um registo numa tabela que já tenha outro registo com a mesma chave primária o programa faz dump. O que em alguns casos é uma chatice porque, mesmo que te estejas nas tintas, te obriga a verificar antecipadamente se aqueles chaves já existem na tabela.

Mas o ABAP prevê esses casos e dá-te uma solução:



INSERT dbtab FROM TABLE itab [ACCEPTING DUPLICATE KEYS].

Não te preocupes que quando acrescentas o ACCEPTING DUPLICATE KEYS não violas a primeira lei da termodinâmica: os registos não são inseridos. A única diferença é que o programa não faz dump. O que pode dar jeito nos casos em que não estás preocupado com o que estás a inserir.

O Abapinho saúda-vos.

3 comentários a “INSERT dbtab ACCEPTING DUPLICATE KEYS”

  1. Felipe Diz:

    Geralmente, pra não receber o dump tenho o costume de usar MODIFY, assim se o registro não existe, o sistema inclui.

    Ou, melhor ainda, tratar a exceção CX_SY_OPEN_SQL_DB…

    Não conhecia o ACCEPTING DUPLICATE KEYS. Esse nome é meio estranho pois na verdade ele não aceita chaves duplicadas, como vc mesmo disse, é impossível.. ele só não vai gerar dump. Bacana.. mais uma opção!

    Valeu!

  2. Nuno Godinho Diz:

    Com o MODIFY corres o risco de alterar registos já existentes. Desta forma se já existirem não são alterados. Apenas os inexistentes são adicionados. Penso ser a única diferença. Será útil para casos muito específicos mas é bom saber que existe.

  3. M.Alves Diz:

    O problema de tratar a exceção CX_SY_OPEN_SQL_DB é que o comando insert é interrompido no ponto que a chave duplicada ocorrer (ou seja, a exceção ocorrer), ignorando os registros restantes. E, também, não é possível determinar o número de registros inseridos via SY-DBCNT.

    Utilizando a extensão ACCEPTING DUPLICATE KEYS, todos os registros com chave não duplicada serão inseridos e o número de registros inseridos é atribuído à SY-DBCNT.

    Eu utilizo essa extensão já faz um bom tempo, permitindo informar ao usuário se todos os registros foram inseridos (sy-subrc = 0) ou se somente um determinado número de registros (sy-dbcnt) foram incluídos (sy-subrc = 4).

    Portanto, na minha opinião, essa extensão é mais versátil do que tratar a exceção.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).