cx_ Oracle .DatabaseError: ORA-01841: (полный) год должен быть между -4713 и +9999, а не 0 - PullRequest
0 голосов
/ 22 апреля 2020

у меня есть Cx_ Oracle вставить запрос, как показано ниже,

cur.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD' ")

cur.execute("INSERT INTO table(col A,col B,col C,col D) values (:1,:2,:3,:4)",(lines['col A'],lines['col B'],lines['col C'],lines['col D']))

здесь мой столбец B & C - это тип данных Date, когда у меня есть значения в обоих, они успешно загружаются.

но когда у меня есть "NULL" или "", это выдает мне следующую ошибку.

> cx_ Oracle .DatabaseError: ORA-01841: (полный) год должно быть между -4713 и +9999 и не должно быть 0

1 Ответ

0 голосов
/ 23 апреля 2020

Нулевое значение должно быть передано как значение None в Python. Вы не можете использовать строковое значение "NULL". Вы также можете часто использовать пустую строку, которая Oracle также обрабатывается как null, но я бы использовал None, если это вообще возможно.

Вы можете увидеть это, если выполните следующее в SQL * Plus.

alter session set nls_date_format = 'YYYYMMDD';
select to_date('') from dual;     /* works -- returns null */
select to_date('NULL') from dual; /* fails with the error you received */

Весь код в вашем примере отсутствует. Было бы полезно показать полный набор кода, который демонстрирует проблему, включая SQL для создания таблицы - при условии, что приведенных выше советов недостаточно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...