如果某些字段已更新为ORACLE,则仅从表中选择语句

时间:2016-05-11 20:06:26

标签: oracle

任何人都可以解释一下,我如何创建一个select语句并从表中获取数据,但只有在特定字段更新的情况下才会这样做?假设我有:

select a, b, c, d , e, f
from table 1 t1
inner join table2 t2
on t1.a = t2.a

我很有意思,如果列 d,e,f 从昨天开始更新,比我想要在我的select语句中包含这一行,但是如果 d,e,f 从昨天开始没有更新,而忽略了这一行。在table1中,我插入了数据时的日期字段(date_created)和更新时的日期字段(date_modified)。棘手的是,table1中的数据可能会在白天由用户更新,但不是强制性字段 d,e,f ,假设用户只需更新列 a,b,c 。但date_modified列将显示该行已更新。所以我不能完全依赖于date_modified列。我的问题是,有没有其他方法如何过滤数据并得到正确的行作为回报?触发器和存储过程不是一个选项,理想情况下是纯sql ..任何帮助?

2 个答案:

答案 0 :(得分:1)

目前还不清楚哪些列属于哪个表,但一种解决方案是使用闪回查询(假设您有足够的撤消保留以适应查询之间的24小时差异)。

在24小时前列def已更改的表格上找到差异的示例是:

SELECT t.*
FROM   table_name t
       INNER JOIN
       (
         SELECT *
         FROM   table_name
                AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '1' DAY
       ) p
       ON ( t.a = p.a
           AND ( t.d <> p.d OR t.e <> p.e OR t.f <> p.f ) );

答案 1 :(得分:0)

解决!解决方案:将一个额外的列(比如说Total)添加到目标表中,作为列 d,e,f 的总和,并首次更新它。之后,如果列 d,e,f 在白天更改,列 d,e,f 的总和将与Total列不同,您可以简单地在where子句中过滤它。 也许它不是最优雅的解决方案,但它可以完成这项工作。 谢谢你的想法!