Вопрос:
Я пытаюсь запустить большой script, который создает таблицу, а затем вставляет в нее почти 15 000 строк. Таблица создается просто отлично, а затем в 833 INSERT, я получаю сообщение об ошибке:
Error: Query was empty (1065)
Вот мой 833-й оператор INSERT (тот, который не работает):
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);
Я не вижу никаких синтаксических ошибок или различий между этой строкой и тем, что работает. FOR, здесь приведен пример инструкции INSERT, которая работает очень хорошо:
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);
Часть, которая меня озадачивает, заключается в том, что ошибка звучит как что-то, что произойдет, если я буду заполнять новую строку, используя данные из другого оператора SELECT, который был пустым. Однако это не так, поскольку мои инструкции INSERT используют статические данные.
Определение моей таблицы выглядит следующим образом:
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)
Я запускаю этот script в GUI MySQL Query Browser.
Может ли это быть чем-то связанным с количеством строк, которые я пытаюсь вставить? Мне нужно периодически совершать? Есть что-то простое, что я просто не замечаю?
Спасибо!
Лучший ответ:
Я бы предложил запустить sql из командной строки в сеансе терминала или SSH. Интерфейс gui может мешать или ограничивать вашу способность запускать большое количество вставок.
Ответ №1
Наиболее распространенным сценарием для работы с ними в файле script является то, что у вас есть двойная двоеточие:
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) ;;
Я бы быстро просмотрел script и посмотрел, есть ли там ;; вокруг строки 833.
Ответ №2
Так как другие вставки работают нормально, и, похоже, не существует разницы в их структуре, я сначала подумал, что у вас заканчивается некоторый ресурс при вставке числа 833.
Что произойдет, если вы сделаете фиксацию после каждой вставки (ваш буфер транзакций может быть исчерпан)? Так ли это работает? На самом деле лучшим испытанием будет одиночная фиксация при транзакции номер 800. Если вы затем выйдете за пределы 833, то это была ваша проблема.
Если это так, просто измените свой script (или script, который автоматически создает ваш script идентификатор, который он автоматически сгенерировал), чтобы совершать каждые 100 или около того вставок (фиксация после того, как каждая вставка, вероятно, сделает ее невыносимо медленной).
Ответ №3
В случае, если вы беспокоитесь о синтаксисе вашего реального запроса, это кажется прекрасным. Я создал ваш стол и запустил вставку, и это сработало. Когда вы говорите, что вы используете script, у вас просто есть файл с сырым SQL, с которым вы работаете? Время, в которое я столкнулся с ошибкой типа “Пустое задание”, раньше было, когда люди используют материал типа JDBC и перепутали свою логику циклов.
Я думаю, что мы можем смело сказать, что это не тот конкретный оператор insert, который вы вставляли, он должен быть чем-то связанным с сервером или синтаксисом вокруг этого запроса в script. Строки должны выполняться автоматически, если вы не переконфигурировали что-то. Вы можете попробовать запустить “show variables”; из командной строки mysql и добавив сюда. Затем мы можем взглянуть на вашу настройку и посмотреть, не выглядит ли что-то странное.
Вы пытались переупорядочить некоторые ваши вставки в файле? Это, по крайней мере, скажет нам, если он не работает по конкретному запросу или в определенном месте в файле. Попробуйте переупорядочить ваши вставки только для того, чтобы убедиться, что он все еще не работает около 833 или если он не работает в другом месте. Если он падает в одном месте, это звучит как память или связанная с буфером вещь. Если он меняет места, когда вы его перемещаете, я бы сказал, что у вас есть бродячий персонаж (или, возможно,), лежащий где-то, как сказал @zombat.
Надеюсь, что это поможет. Сообщите нам, что вы можете.
Ответ №4
Сегодня я столкнулся с такой же ошибкой. По-видимому, когда я использовал подготовленные операторы для PDO: MySql, таблица имела нулевые данные во время запросов.
Мне пришлось исправить все отсутствующие данные из таблицы.