El 25/01/2008 18:32, Sebastian Bassi escribió:
Estoy teniendo un problema y no le encuentro la vuelta para hacerlo de
la manera correcta.
Tengo una tabla asi (esto es esquematico, la tabla real es mas grande):

Col_A,Col_B,Col_C
datoA1,datoB1,datoC1
datoA2,datoB2,datoC2

Quiero reemplazar los datos de COL_B. Supongamos que quiero poner
datoB1x en lugar de datoB1 y datoB2x en lugar de datoB2.
Uso phpmyadmin y uso la opcion IMPORT en la tabla correspondiente,
importo como CSV a la columna esa (indicando que importo solo esa
columna), pero en lugar de obtener esto:

Col_A,Col_B,Col_C
datoA1,datoB1x,datoC1
datoA2,datoB2x,datoC2

Obtengo esto:

Col_A,Col_B,Col_C
datoA1,datoB1,datoC1
datoA2,datoB2,datoC2
NULL,datoB1x,NULL
NULL,datoB2x,NULL

El problema es que se agregan al final en lugar de reemplazar Col_B.
Entonces hice lo siguiente:

Borre Col_B y la volvi a crear (asi la tengo vacia), hice el mismo
procedimiento para importar Col_B desde el CSV file y obtuve:

Col_A,Col_B,Col_C
datoA1,NULL,datoC1
datoA2,NULL,datoC2
NULL,datoB1x,NULL
NULL,datoB2x,NULL

La unica solucion que le encuentro es exportar toda la tabla,
modificarla afuera en el CSV, borrarla (o vaciarla) y luego volver a
importar todo. Si bien esto funciona, me gustaria saber como hacerlo
bien, sin tener que recurrir a esto.



Sebastián,
el problema es que los importadores casi siempre son para agregar datos. Es complejo (y a veces peligroso) hacer un importador que actualice datos, porque deberían considerarse un montón de situaciones: determinar cuál es la clave primaria, resolver errores de constraints, atender a muchas situaciones dudosas, etc. En general los importadores desde csv/texto hacen un trabajo demasiado simple, y son solo importadores "bulk" de datos nuevos (para tablas vacias o temporales).

Las importaciones de actualizaciones en general se hacen en 2 pasos: se importar en tablas vacias o en tablas temporales, y luego, mediante algún SP o query se pasan los datos con los debidos controles (que solo puede saberlos quien conozca el modelo).

Incluso cuando hay herramientas más automáticas, personalmente prefiero igual hacerlo en 2 pasos: es más seguro y tengo mayor control sobre lo que sucede, incluso a veces es más rápido. Por defecto tiendo a sospechar de cualquier herramienta "inteligente" hasta que me demuestre confianza :p (re-paranoico, jajaj)

De todas formas veo en un mail posterior que le encontraste la vuelta con un simple update. Excelente, siempre hay que estar atento primero a esa posibilidad porque es increíble lo que se puede hacer solo con SQL (y más en Oracle, cof, cof, ya me tenía que salir!)

Un último detalle: recordá que ningún gestor de bases de datos relacional te garantiza el orden de los registros. Las bases guardan los registros en cualquier orden, y pueden devolverlos en cualquier orden (por definición), a menos que realices un SELECT con clausula ORDER BY para ordenarlos por algún criterio de negocio. Por ese mismo motivo, el orden de un archivo csv/texto puede ser aleatorio o apenas ser el orden en que fueron exportados. Para peor, desde la exportación pudo haber insert/update/delete en la tabla, y hay que considerar estas situaciones.

Hay gestores relaciones donde existen pseudo-columnas (rownum, rowid, etc) en las tablas que representan algún número de orden para los registros de la tabla, pero cuidado, hay que entender muy bien cómo se generan y qué alcancen tienen, para no tener un disgusto.

No te desanimes si te parece que hay que considerar muchas cosas al importar datos, porque te estoy planteando la peor situación para tener presente algunas alternativas eventualmente.

Saludos,
Pablo

--
Para desuscribirte tenés que visitar la página
https://listas.linux.org.ar/mailman/listinfo/lugar-gral/

/* Publica y encontra trabajo relacionado con softlibre en 
http://www.usla.org.ar/modules/jobs/ */

Si tenés algún inconveniente o consulta escribí a mailto:[EMAIL PROTECTED]

Responder a