如何找到最后一张桌子?

时间:2015-09-15 10:15:40

标签: sql oracle plsql procedure

我有2个相同的Oracle表(表1和表2)。这两个表中的数据插入都是截断然后加载。将数据插入表后,将在其上应用同义词。还可以使用

找到要为下次加载插入的表
SELECT   OBJECT_NAME
     INTO   var1
     FROM   (SELECT   RR.OBJECT_NAME,
                      RANK () OVER (ORDER BY RR.LAST_DDL_TIME ASC) RNK
               FROM   SYS.ALL_OBJECTS RR
              WHERE  RR.OBJECT_NAME IN
                               ('Table1', 'Table2'))
    WHERE   RNK = 1;

但是我需要一种替代技术,因为如果我们向任何用户授予访问角色,这两个表的DDL_TIME就会变得相同。请注意,我们无法改变表结构

1 个答案:

答案 0 :(得分:0)

评论太长了。

您的应用程序设计很差。您正在将数据库元数据用于不适合的目的。如果需要跟踪用户被授予访问表的时间等内容,则应将此信息显式保存在另一个表中,将访问控制逻辑包装在存储过程中或使用DDL触发器。

您遇到问题的一个迹象是DDL_TIME没有按照您的意愿行事。本专栏正在完成记录的工作,可能是数据库需要它做什么。缺点是你重新解释它。