Tenho a seguinte tabela:
CREATE TABLE `tab1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`DEFAULT` VARCHAR(25) DEFAULT NULL,
`ITEM` varchar(25) DEFAULT NULL,
`TIMESTAMP` TIMESTAMP DEFAULT NULL,
`NAME` varchar(25) DEFAULT NULL,
`SURNAME` varchar(45) DEFAULT NULL,
`LOADED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
Em seguida, tenho um arquivo XML contendo várias entradas, como:
<RECORD
ITEM="item1"
TIMESTAMP="2015-08-26 10:04:40"
NAME="Bob"
SURNAME="SMITH"
/>
Eu uso o MySQL para importar os dados com:
LOAD XML LOCAL INFILE 'c:/myFile.xml'
INTO TABLE `test`.`tab1`
ROWS IDENTIFIED BY '<RECORD>';
Isso funciona bem. No entanto, preciso especificar um valor padrão para o DEFAULT
campo. Mas ela precisa ser especificada na hora que carrego o arquivo, e será diferente para cada arquivo. (por uma questão de argumento, vamos usar o nome do arquivo, myfile.xml
)
Como posso adicionar um valor padrão para esta linha durante a importação do XML?
Eu olhei para usar algo como:
LOAD XML LOCAL INFILE 'c:/myFile.xml'
INTO TABLE `test`.`tab1` (@default="myfile.xml")
ROWS IDENTIFIED BY '<RECORD>';
SET DEFAULT=@default;
Mas não gostou disso. Existe uma maneira de contornar isso?
Quando é preciso fazer algo mais complexo que está disponível na sintaxe, muitas vezes é útil 'preparar' os dados por meio de uma tabela temporária:
Talvez:
ou: