2009-10-07 8 views

Répondre

5

vous ne pouvez pas utiliser une variable pour le nom de fichier. Comme LIMIT, il doit s'agir d'une valeur littérale, pas d'une formule ou d'une variable. Par exemple, quel nom de fichier le fichier va-t-il être écrit ici?

SET @LOAD_TIME = UNIX_TIMESTAMP(); 
SET @OUTFILE = CONCAT(CONCAT('/tmp/outfile_', @LOAD_TIME), '.sql'); 

SELECT @OUTFILE = columnA 
, columnB 
FROM `tableA` 
INTO OUTFILE @OUTFILE; 

Ceci est une restriction similaire à celle sur LIMIT. Si les expressions sont autorisées dans les clauses LIMIT, vous pouvez créer des requêtes qui ont un comportement imprévisible. Par exemple, disons que vous avez une table avec 10 lignes et la colonne a les valeurs de 1 à 10. Quelle est la sortie de cette requête?

SELECT * 
    FROM myTable 
ORDER 
    BY a 
LIMIT 10 - a 

la base de cette limitation est la suivante: si vous pouvez calculer la limite, vous devez calculer explicitement la limite et puis construire la requête avec la valeur littérale. L'évaluation d'expressions telles que 10 - a rend le plan d'exécution de la requête potentiellement BEAUCOUP plus compliqué.

+0

Je vais marquer cela comme réponse si personne d'autre ne répond, mais je me demande pourquoi. Est-ce que c'est défini par la loi ou est-ce juste une question de mise en œuvre ou quelque chose? – James

+0

J'ai développé ma réponse ci-dessus pour expliquer pourquoi. – longneck

+0

Merci. Ceci explique cela. – James

Questions connexes