我正在创建一个相当深入的时态数据库原型,我们使用Oracle的Total Recall来管理事务时间。
我的测试数据集包含大约150k个当前行以及加载到启用FLASHBACK ARCHIVE的表中的170k个退役行。增强的SQL查询(如下面的第一个)正确执行,提供适当的数据结果。
select * from CUT_BLOCK_COMBO AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC') WHERE CB_SKEY = 4141;
此select语句返回以下数据:
CB_SKEY HVA_SKEY FOREST_FILE_ID CUTTING_PERMIT_ID TIMBER_MARK CUT_BLOCK_ID ----------- ----------- -------------- ----------------- ----------- ------------ 4141 53094 A80053 80053 29025
然而,一旦我将表包装到视图中,我就不能再使用'AS OF TIMESTAMP'子句查询数据了。
create or replace view CUT_BLOCK_COMBO_VW as select * from CUT_BLOCK_COMBO;
select * from CUT_BLOCK_COMBO_VW AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC') WHERE CB_SKEY = 4141;
视图中的select语句返回以下错误: ORA-01466:无法读取数据 - 表定义已更改
创建视图定义时我错过了什么想法?我在文档中找不到任何内容(Oracle Total Recall 11G R2)
答案 0 :(得分:0)
它是否可以作为内联视图?
我怀疑该视图必须存在于时间戳中。可能代码正在查找您使用AS OF的对象的创建日期或最后DDL时间。
只是一个理论,但你可以很容易地测试它,并且可能通过追踪执行来证明这个理论。
如果是这样,那么我恐怕不会想到一个安全的解决方法。