Estoy tratando de cargar un archivo donde todas las líneas usan las mismas reglas. (Asumir CABECERA es una sola línea)MySQL: cómo cargar datos con formato de fila fija en variables de usuario
HEADER1
HEADER2
.......
Pero desgraciadamente cuando trato de utilizar la instrucción LOAD DATA INFILE consigo este error: Código de error : 1409 No se puede cargar valor a partir de los archivos de tamaño fijo filas a la variable.
Este es el código que he escrito:
USE test;
DROP TABLE IF EXISTS EXAMPLE_H;
CREATE TABLE EXAMPLE_H(
ID CHAR(20),
SP CHAR(3),
IVA CHAR(11) PRIMARY KEY,
NLP CHAR(6),
DLP DATE,
DUVI DATE,
DELP CHAR(30),
FILLER CHAR(39),
VTLP CHAR(3),
FILL CHAR(49)
);
LOAD DATA INFILE 'BTILSP.TXT'
INTO TABLE test.EXAMPLE_H
FIELDS TERMINATED BY ''
LINES TERMINATED BY '\n'
(ID, SP, IVA, NLP, @var_date_one, @var_date_two, DELP, FILLER, VTLP, FILL)
SET DLP = str_to_date(@var_date_one, '%Y%m%d',
DUVI = str_to_date(@var_date_two, '%Y%m%d');
Tenía la idea de la lectura de la parte inferior de this page (comentario de Ramam Pullella), y me encontré con el mismo se explica en algunos sitios web, pero no puedo entender por qué estoy recibiendo este error
Si no utilizo las variables @var_date_one y @var_date_two, por lo que la función STR_TO_DATE, la fecha no se representa como necesita MySql - la fecha en el archivo es algo así como "20100701" - entonces ese campo contener todos los ceros o una fecha diferente a la que estoy esperando. Si cambio DLP y DUVI para que sean representados por CHAR (8), entonces funciona, pero no usaré las comparaciones SQL DATE y herramientas similares.
¿Me puede ayudar por favor? :) Muchas gracias.
EDIT:
Parece que el problema viene dado por la línea SUSPENDIDO POR '', ya que este tipo de línea es una "fila fijo (no delimitada)". Tal vez no se puede asignar a la variable por un motivo desconocido, pero es de esta manera que funciona. La documentación dice:
User variables cannot be used when loading data with fixed-row format because user variables do not have a display width.
Cualquier sugerencia?
RE-EDIT: He leído el comentario de Ryan Neve en la parte inferior de esa página. Él da un truco para leer filas fijos en variables:
LOAD DATA LOCAL INFILE '<file name>' INTO TABLE <table>
(@var1)
SET Date=str_to_date(SUBSTR(@var1,3,10),'%m/%d/%Y'),
Time=SUBSTR(@var1,14,8),
WindVelocity=SUBSTR(@var1,26,5),
WindDirection=SUBSTR(@var1,33,3),
WindCompass=SUBSTR(@var1,38,3),
WindNorth=SUBSTR(@var1,43,6),
WindEast=SUBSTR(@var1,51,6),
WindSamples=SUBSTR(@var1,61,4);
¿Cree que es una buena manera de hacerlo? :)
En documentos indican que no va a funcionar para los datos de formato de longitud fija. Lo mejor, es volver a actualizar su archivo de inserción. O cámbielo a varchar, y realice una conversión de tipo más tarde. – ajreal
@ajreal: ¡gracias! Ayer no leí tu respuesta, pero edité mi pregunta y escribí algo así como lo que dijiste :) – Markon