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]