sql >> Databáze >  >> RDS >> Mysql

Problémy s MySQL LOAD XML INFILE

Nemohl jsem najít způsob, jak to udělat pomocí LOAD XML INFILE při zachování obsahu CDATA. Následující však funguje a používá starý dobrý LOAD DATA INFILE spolu s ExtractValue() dosáhnout stejné věci:

Pokud máme váš vzorový soubor a tuto tabulku:

CREATE TABLE `yahootable` (
  `id` int(11) NOT NULL PRIMARY KEY,
  `various` text,
  `message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

poté spuštěním tohoto příkazu importujete obsah souboru do tabulky:

LOAD DATA INFILE 
    '/tmp/yahootable.xml'
INTO TABLE 
    yahootable
CHARACTER SET 'utf8'
LINES STARTING BY '<row>' TERMINATED BY '</row>'
(@tmp)
SET
  id      = ExtractValue(@tmp, '//id'),
  various = ExtractValue(@tmp, '//various'),
  message = ExtractValue(@tmp, '//message')
;

Funguje to tak, že LOAD DATA INFILE řeknete, že každý <row>...</row> je logický 'řádek', který ukládá do lokální proměnné @tmp . Toto pak předáme do ExtractValue fungovat jako fragment XML a vybrat z něj požadované hodnoty pomocí příslušných výrazů XPath.




  1. Jaké oprávnění potřebuje uživatel MySQL k vytvoření databáze?

  2. Jak zkontrolovat, zda soubor existuje v PL/SQL?

  3. Více generátorů Hibernate sekvence pro jednu entitu s PostgreSQL

  4. SQL LocalDB vs SQL Server CE