PDA

Ver la Versión Completa : Clave duplicada en INSERT


goyleo
02/12/08, 12:15:30
como utilizo la exepcion en el insert ITAB_DUPLICATE_KEY ????
se aplica por medio de TRY ?????
Si alguien tiene un ejemplo me ayudaria mucho!!!! :D

mysmb2
02/12/08, 12:54:57
hola, porque no probas con un modify
te agrega un registro a la tabla de diccionario si no existe

chivi82
02/12/08, 13:06:10
Hola, te pongo un ejemplo de como capturar excepciones:
TRY.
SELECT matnr charg ingew sitbu bulid FROM z40bupa
INTO TABLE g_it_z40bupa
WHERE matnr IN s_matnr
AND charg IN s_charg
AND sitbu IN s_sitbu
AND werks IN s_werks
AND ersda IN s_ersda.

CATCH cx_sy_open_sql_db.
MESSAGE i098(z40pp) WITH 'Select con demasiados registros'.
EXIT.
ENDTRY.

DavidXD_XD
02/12/08, 13:48:30
Si necesitas un Log ... podrias usar un LOOP y dentro de el un INSERT

LOOP AT itab ASSIGNING <fs>.
INSERT ztabla FROM <fs>.
* Verificando que la entrada existe
IF sy-subrc NE 0.
(Llenar una tabla interna para un Log)
ENDIF.
ENDLOOP.

Cuando realizar un INSERT a partir de una estructura no arroja ninguna excepcion, el problema es cuando lo haces a partir de una tabla interna

INSERT ztabla FROM TABLE itab.

goyleo
02/12/08, 14:50:28
DavidXD_XD en este caso que me envias si hay registros duplicados en la tabla arrojaria DUMP o estoy equivocado? por lo que vi en la ayuda de sap para el insert, me parecio que existe una manera de manejar una ecepcion ITAB_DUPLICATE_KEY ???? es correcto esto??? :confused:

DavidXD_XD
02/12/08, 14:52:57
No del todo .... como lo habia mencionado, cuando realizas un INSERT usando solo un registro, el resultado dependera del sy-subrc, pero si realizas un INSERT a partir de una tabla interna si arroja un DUMP, la razon es porque dentro de la tabla interna no hay como comunicar que registros han pasado y q otros no, como no se puede controlar SAP solo arroja la excepcion q termina en DUMP, para esos casos es mejor el MODIFY ztabla FROM TABLE itab.