1

我有一个问题,我希望我的输出是一个包含 2 列的表(我们称之为输出):一列用于“TableName”,一列用于上次更新的 DateTime(使用 scn_to_timestamp(max(ora_rowscn))命令)。

我有 100 个表,我想将所有这些表的最后更新日期/时间拉入输出表。

所以我可以这样做:

insert into Output(TableName) 
select table_name
from all_tables;

这会将我从数据库中获得的所有表放入 TableName 列。但我不知道如何遍历每个条目并将表名用作变量并将其传递给 scn_to_timestamp(ora_rowscn)。

我想我会尝试如下:

for counter in Output(TableName) LOOP
insert into Output(UpdateDate)
select scn_to_timestamp(max(ora_rowscn)) 
from counter;
END LOOP;

有什么建议么?

谢谢

4

1 回答 1

0

这个查询有点笨拙,因为它用于xmlgen在查询中执行动态 sql,但它可能对你有用。

select x.*  
  from all_tables t,       
       xmltable('/ROWSET/ROW' passing
            dbms_xmlgen.getxmltype('select ''' || t.table_name ||
                                   ''' tab_name, max(ora_rowscn) as la from ' ||
                                   t.table_name) 
                 COLUMNS tab_name  varchar2(30) PATH 'TAB_NAME',
                         max_scn number PATH 'LA') x

这是一个 sqlfiddle 演示

您也可以使用 PLSQL 然后使用execute immediate

于 2013-11-06T11:45:10.820 回答