我正在使用Python2,Oracle10g和cxOracle。
在我的Python代码中,我有一个特定的日期时间,如下所示:
last_check_timestamp = datetime.today() - timedelta(hours = 1)
print last_check_timestamp
>>> last_check_timestamp = 2016-03-14 11:13:06.743626
print type(last_check_timestamp)
>>> type(last_check_timestamp) = <type 'datetime.datetime'>
我想运行一个查询,检索在所述日期时间之后插入的所有行。这就是我尝试这样做的方式:
query_string = ("SELECT * FROM {0} "
"WHERE SCN_TO_TIMESTAMP(ORA_ROWSCN) >= '{1}'".\
format(db_name, self.last_check_timestamp.timetuple()))
logger.info("query_string = \n%s\n" % query_string)
因此,Oracle收到的结果查询字符串为:
SELECT * FROM SYS.DUAL
WHERE SCN_TO_TIMESTAMP(ORA_ROWSCN) >= 'time.struct_time(tm_year=2016, tm_mon=3, tm_mday=14, tm_hour=11, tm_min=23, tm_sec=26, tm_wday=0, tm_yday=74, tm_isdst=-1)'
这就是我得到的错误:
cx_Oracle.DatabaseError: ORA-01858: a non-numeric character was found where a numeric was expected
如何进行日期比较以使Oracle能够接受查询?
答案 0 :(得分:0)
除非启用了行依赖关系,否则最后一个SCN将存储在数据块级别而不是行级别。为了获得行级别的SCN编号,您需要在表的行依赖项上。
$('.attendee').parent().draggable({ revert: true });
我相信你正在以不正确的格式将时间戳传递给oracle,因为time.struct_time不是oracle函数
select * from tablename where SCN_TO_TIMESTAMP(ORA_ROWSCN)='14-MAR-16 02.01.05.000000000 PM';