A veces en los proyectos de migración, por falta de tiempo, de presupuesto o por otros motivos, resulta imprescindible saltarse las mejores prácticas en las cargas con EIM y nos vemos obligados a realizar INSERTs directamente en las tablas base de Siebel, sin usar las correspondientes tablas EIM.
Un ejemplo de esta necesidad es por ejemplo cuando tenemos que hacer una carga en una tabla customizada (CX_***) y no hemos contado con los servicios de Expert Services de Oracle para construir el mapeo a tabla EIM necesario (en otra entrada de este blog se explicaba cómo se podía hacer esto directamente editando ficheros XML y «engañando» a Siebel Tools para construir mapeos EIM contra tablas custom o foreign keys custom):
http://www.autanacrm.com/index.php/es/blog/eim-en-tablas-customizadas-parte-ii
Oracle avisa claramente del peligro de hacer este tipo de acciones DML (INSERT, UPDATE, DELETE) sobre tablas base, ya que pueden provocar inconsistencias y falta de integridad referencial.
Siebel genera con su propio algoritmo interno cada ROW_ID de cada fila creada en cada tabla base o tabla de repositorio, con lo que insertar filas inventándonos nuestro propio ROW_ID es muy peligroso ya que no aseguramos la unicidad de una forma robusta.
Bien, si a pesar de todas las advertencias, estamos seguros de que queremos insertar de una forma segura registros en tablas base de Siebel, podemos proceder de la siguiente manera, sin tener el peligro de provocar incosnsistencias en el ROW_ID.
Durante la instalación de la bbdd de Siebel se crea una función en el paquete S_SEQUENCE_PKG llamada GETNEXTROWID(). Esta función no recibe parámetros de entrada y devuelve como salida un ROW_ID único que podemos usar en nuestro insert.
Así, por ejemplo, si queremos cargar en Siebel, en una tabla custom, desde una fuente de datos externa, como por ejemplo un callejero, podríamos proceder del siguiente modo:
INSERT INTO CX_TABLACUSTOM (ROW_ID, CREATED, CREATED_BY, LAST_UPD, LAST_UPD_BY, DB_LAST_UPD, DB_LAST_UPD_SRC, CONFLICT_ID, MODIFICATION_NUM, CUSTOM_COLUMN1, CUSTOM_COLUMN2)
VALUES (S_SEQUENCE_PKG.GETNEXTROWID(), SYSDATE, ‘0-1’, SYSDATE, ‘0-1’, SYSDATE, ‘EIM’, 0,0,CUSTOM_VALUE1, CUSTOM_VALUE2);
Así, aunque siempre tenemos el riesgo de que los datos insertados no cumplan algunas reglas de negocio de Siebel, estaremos cargando registros de un modo similar al «EIM», sin tener tablas EIM dedicadas para ello.
En cualquier caso, personalmente no recomiendo usar este método salvo circunstancias excepcionales del proyecto.




