OCI只通过时间戳从Oracle获取新行

时间:2015-06-23 13:39:19

标签: c oracle oci

我必须使用OCI创建C应用程序,从数据库中检索新行,我的意思是:从上次会话到当前时间添加的行。 ora_rowscn不是解决方案:为块更改此值,以便几个不同的行可以具有相同的SCN。

例如,我有一张日期表:

  • 2015年3月5日
  • 2015年5月5日
  • 2015年7月5日

我可以制作结构:

T.InstrumentCode

03.05.2015是开始,2015年5月7日结束。

Bounds.end 之后检查行很简单。但是在我上次查询之后可能会有一些延迟或交易,我可以有新的值。

  • 2015年3月5日
  • 2015年4月5日
  • 2015年5月5日
  • 2015年6月5日
  • 2015年7月5日

可以通过查询检测这些新行计数(STARD和END是结构值):

struct Bounds {
    Timestamp start, end;
};

然后我有3行和5行。我的申请只是阅读延期。

1 个答案:

答案 0 :(得分:1)

Oracle数据库是并发环境。所以一般来说,如何判断" last"是什么?插入行因为技术上没有最后插入的行。

AFAIK你有两个选择

  • 使用Continuous Query Notification。这绕过了SQL查询接口,并使用专门用于此特定目的的API。

  • 另一个选项是查询当前数据库SCN并使用此SCN启动事务。请参阅OCIStmtExecute,此函数有两个参数snap_in / snap_out。从理论上讲,您可以使用它们来跟踪您在数据库SCN上的视图。但我不确定我从未使用过它。

在Oracle中,读者不会阻止编写者,反之亦然。 因此,将于2015年6月6日(但于2015年5月8日提交)插入一行 AFTER 7.5.2015。 Oracle是并行数据库,不保证任何序列化。

也许如果您使用row level ora_rowsncn,那么它会起作用。但这需要重新定义源表。