#python #sql #oracle #cx-oracle
Вопрос:
Я пытаюсь обновить таблицу SQL с помощью библиотеки cx_Oracle Python, но получаю ошибку cx_Oracle.Ошибка базы данных: ORA-00933: команда SQL неправильно завершена, независимо от окончания запроса (с/без ;). Есть какие-нибудь идеи, что может произойти?
UPDATE TABLE_NAME
SET ROW_NAME = 345434, ISSUE_DATE = 2020-02-03 12:14:28
WHERE ROW_ID = 327692
Примечание: дата передается как объект datetime. Приведенный выше код показывает, что выводится из трассировки стека.
Комментарии:
1.2020 — 02 — 03 = 2015.
Ответ №1:
у вас есть запятая в конце даты выпуска, также вам нужно будет передать дату в виде строки
UPDATE TABLE_NAME
SET ROW_NAME = 345434,
ISSUE_DATE = '2020-02-03 12:14:28'
WHERE ROW_ID = 327692e
также вы можете это сделать:
UPDATE TABLE_NAME
SET ROW_NAME = 345434,
ISSUE_DATE = to_date('2020-02-03 12:14:28', 'yyyy-mm-dd hh:mi:ss am')
WHERE ROW_ID = 327692e
дайте мне знать, если это поможет 🙂
Комментарии:
1. На самом деле он передается как объект datetime (который не показан выше). Ошибка читается без «,» в конце даты, поэтому я предполагаю, что дата передана правильно.
2. попробуй и узнай. обычно в sql эти ошибки возникают по одной за раз. когда вы уберете запятую с конца. вы увидите остальные ошибки. Я просто предоставил наилучший результат, в котором вы должны написать запрос. если вы передаете переменную, не нужно делать следующее, просто удалите запятую
3. Удаление «,» после даты выпуска и передача даты выпуска в качестве объекта datetime привели к той же ошибке. Не знаю, на что он жалуется.
4. покажите код python, касающийся того, как cx_oracle вызывает курсор.выполнить()
5. Оказывается, ты был прав. Python передавал объект DateTime в запрос, но отображал DateTime в виде строки ПЕРЕД передачей в базу данных oracle. Использование to_date (), как описано выше, устраняет проблему.