cx_Oracle.DatabaseError: ORA-01841: (全)年必须在-4713和+9999之间,而不是0。

问题描述 投票:0回答:1

我有一个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 "或""时,它却向我抛出以下错误。

&gt.Cx_Oracle.DatabaseError cx_Oracle.DatabaseError: ORA-01841: (full) year must be between -4713 and +9999, and not be 0.

sql python-3.x cx-oracle
1个回答
0
投票

必须传递一个空值作为值 None 在Python中,你不能使用字符串值 "NULL"。你不能使用字符串值 "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--假设上面给出的提示还不够充分,那将会很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.