如何查询在特定日期之后插入的行

时间:2016-03-14 11:30:05

标签: python oracle oracle10g cx-oracle

我正在使用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能够接受查询?

1 个答案:

答案 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';