Ошибка MySQL:Запрос был пустым (1065) для простого оператора INSERT.

StackOverflow https://stackoverflow.com/questions/1325348

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь запустить большой скрипт, который создает таблицу, а затем вставляет в нее почти 15 000 строк.Таблица создается нормально, а затем при вставке 833 я получаю ошибку:

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);

Я не вижу никаких синтаксических ошибок или различий между этой строкой и той, которая работает.Для справки, вот пример оператора 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) 

Я запускаю этот сценарий в браузере запросов MySQL с графическим интерфейсом.

Может ли это быть связано с количеством строк, которые я пытаюсь вставить?Нужно ли мне периодически совершать обязательства?Есть ли что-то простое, что я просто упускаю из виду?

Спасибо!

Это было полезно?

Решение

Я бы предложил запустить sql из командной строки в терминале или сеансе SSH.Графический интерфейс может мешать или ограничивать вашу возможность запуска большого количества вставок.

Другие советы

Чаще всего они встречаются в файле сценария, когда где-то стоит двойная точка с запятой:

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)
;;

Я бы сделал быстрый поиск по сценарию и посмотрел, есть ли ;; там около строки 833.

Поскольку другие вставки работают нормально и в их структуре нет разницы, моя первая мысль заключается в том, что у вас заканчивается какой-то ресурс во вставке номер 833.

Что произойдет, если вы выполните фиксацию после каждой вставки (возможно, в буфере транзакции не хватает места)?Тогда это работает?На самом деле, лучшим тестом будет однократная фиксация транзакции с номером 800.Если вы затем выйдете за пределы 833, то это будет ваша проблема.

Если это так, просто измените свой сценарий (или сценарий, который создает ваш идентификатор сценария, который он генерирует автоматически), чтобы фиксировать каждые 100 или около того вставок (фиксация после каждой вставки, вероятно, сделает его невыносимо медленным).

Если вас беспокоит фактический синтаксис запроса, все в порядке.Я создал вашу таблицу, запустил вставку, и все сработало.Когда вы говорите, что запускаете сценарий, у вас есть просто файл, полный необработанного SQL, который вы выполняете?Раньше я сталкивался с ошибкой типа «Пустой запрос», когда люди использовали вещи типа JDBC и у них была испорчена логика цикла.

Я думаю, мы можем с уверенностью сказать, что это не тот конкретный оператор вставки, который вы вставили, это должно быть что-то связанное с сервером или синтаксисом этого запроса в скрипте.Строки должны фиксироваться автоматически, если вы ничего не переконфигурировали.Вы можете попробовать запустить «показать переменные»; из командной строки MySQL и добавления ее здесь.Затем мы сможем взглянуть на вашу настройку и посмотреть, не выглядит ли что-нибудь странным.

Пробовали ли вы изменить порядок некоторых вставок в файле?Это, по крайней мере, скажет нам, произошел ли сбой при выполнении определенного запроса или определенного места в файле.Попробуйте изменить порядок вставок, чтобы посмотреть, происходит ли сбой в 833 или в другом месте.Если он падает в одном и том же месте, это похоже на проблему, связанную с памятью или буфером.Если он меняет места при перемещении, я бы сказал, что у вас есть случайный символ (;или .возможно) валяется где-то, как сказал @zombat.

Надеюсь, это поможет.Дайте нам знать, что вы можете.

Сегодня я столкнулся с той же ошибкой.По-видимому, когда я использовал подготовленные операторы для PDO:MySql, во время запроса в таблице были нулевые данные.

Пришлось исправить все недостающие данные из таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top