Question

Je suis en train d'exécuter un grand script qui crée une table, puis insère près de 15 000 lignes en elle. La table est créée très bien, puis à 833 INSERT, je reçois une erreur:

Error: Query was empty (1065)

Voici ma déclaration 833e INSERT (celui qui échoue):

INSERT INTO CLASSCODE (CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT) VALUES (10255, "Funeral Directors - incl PL other than Crematory  - 10255", 3, "Service", "AZ", 19980801, NULL);

Je ne vois pas d'erreurs de syntaxe ou les différences entre cette ligne et qui fonctionne. A titre de référence, voici un exemple d'une instruction INSERT qui fonctionne très bien:

INSERT INTO CLASSCODE (CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT) VALUES (10425, "Frame Shop - Picture/Posters                      - 10425", 2, "Retail", "AZ", 19980801, NULL);

La partie qui me déconcerte est que l'erreur ressemble à quelque chose qui se passerait si je peuplait la nouvelle ligne à l'aide des données d'une autre instruction SELECT, qui était à venir vide. Ce n'est pas le cas, bien que, comme mes instructions INSERT utilisent tous les données statiques.

Ma définition de la table ressemble à ceci:

CREATE TABLE CLASSCODE (
      CLASS_CODE INTEGER NOT NULL, 
      CLASS_CODE_NAME VARCHAR(60) NOT NULL, 
      RATE_GROUP SMALLINT NOT NULL, 
      PROGRAM_NM VARCHAR(20) NOT NULL, 
      ST_CODE CHAR(2), 
      EFF_DT DATE, 
      EXP_DT DATE) 

Je suis en cours d'exécution de ce script dans l'interface graphique MySQL Query Browser.

pourrait-il quelque chose à voir avec le nombre de lignes que je tente d'insérer? Ai-je besoin de commettre périodiquement? Y at-il quelque chose de simple que je méconnais juste?

Merci!

Était-ce utile?

La solution

Je suggère l'exécution du sql de la ligne de commande dans une session de terminal ou SSH. L'interface graphique peut interférer avec ou limiter votre capacité à exécuter le grand nombre d'inserts.

Autres conseils

Le scénario le plus courant de rencontrer ces derniers dans un fichier de script est quand vous avez quelque part un double point-virgule:

INSERT INTO CLASSCODE 
(CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT)
VALUES
(10255, "Funeral Directors - incl PL other than Crematory  - 10255", 3, "Service", "AZ", 19980801, NULL)
;;

Je ferais une recherche rapide par le script et voir s'il y a une ;; là-bas autour de la ligne 833.

Comme les autres inserts fonctionnent bien et il ne semble pas être une différence dans la structure d'eux, ma première pensée est que vous êtes à court d'une ressource à insérer le numéro 833.

Qu'est-ce qui se passe si vous commettez un après chaque insertion (votre tampon de transaction peut être à court d'espace)? Est-ce que ça marche alors? En fait, un meilleur test serait un seul commettras au numéro de transaction 800. Si vous obtenez alors au-delà de 833, alors que c'était votre problème.

Dans ce cas, il suffit de modifier votre script (ou le script qui crée votre identifiant de script, il est généré automatiquement) à commettre 100 ou si inserts (commis après chaque insertion sera probablement faire insupportablement lent).

Si vous êtes inquiet au sujet de votre syntaxe de requête réelle, il semble bien. J'ai créé votre table et couru l'insert et cela a fonctionné. Quand vous dites que vous utilisez un script, vous avez juste un fichier complet de SQL cru que vous utilisez à travers? Les temps que j'ai couru dans l'erreur de type « vide requête » avant ont été quand les gens utilisent des choses de type JDBC et ont leur logique de mise en boucle foiré.

Je pense que nous pouvons dire ce n'est pas cette déclaration d'insertion particulière que vous avez collé dans, il faut que ce soit quelque chose lié au serveur ou la syntaxe autour de cette requête dans le script. Les lignes doivent être se commited automatiquement à moins que vous avez reconfiguré quelque chose. Vous pouvez essayer d'exécuter « Afficher les variables; » à partir de la ligne de commande mysql et annexant ici. On peut alors jeter un oeil à votre configuration et voir si quelque chose semble bizarre.

Avez-vous essayé réordonner certains de vos encarts dans le fichier? Cela au moins nous dire si elle est à défaut sur une requête particulière ou un endroit particulier dans le fichier. Essayez réorganisant vos inserts juste pour voir si elle ne parvient pas encore à 833 ou si elle échoue dans un endroit différent. Si elle tombe au même endroit, il sonne comme une mémoire tampon ou chose liée. Si elle change de place lorsque vous vous déplacez, je dirais que vous avez un caractère parasite (un;. Ou peut-être). Autour de la pose quelque part comme @zombat dit

L'espoir qui aide. Faites-nous savoir ce que vous pouvez.

J'ai rencontré la même erreur aujourd'hui. Apparemment, quand j'utilisais des déclarations préparées AOP:. MySql, la table était d'avoir des données nulles lors de la requête

Je devais rectifier toutes les données manquantes de la table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top