Sql 动态查询以查找oracle所有表中的所有表DML活动

Sql 动态查询以查找oracle所有表中的所有表DML活动,sql,oracle,plsql,dynamic-sql,dml,Sql,Oracle,Plsql,Dynamic Sql,Dml,嗨,我需要搜索模式中指定表列表的DML活动 单一查询 select max(ora_rowscn),SCN_TO_TIMESTAMP(max(ora_rowscn)) FROM 'TABLE_NAME' 由于运行单个查询非常耗时且困难,因此我尝试准备一个动态sql,从所有表中获取max(ora_rowscn)、SCN_to_TIMESTAMP(max(ora_rowscn)),以便使用过滤器并选择一组表 查询模板 select 'with tmp(table_name, row_number)

嗨,我需要搜索模式中指定表列表的DML活动

单一查询

select max(ora_rowscn),SCN_TO_TIMESTAMP(max(ora_rowscn)) FROM 'TABLE_NAME'
由于运行单个查询非常耗时且困难,因此我尝试准备一个动态sql,从所有表中获取max(ora_rowscn)、SCN_to_TIMESTAMP(max(ora_rowscn)),以便使用过滤器并选择一组表

查询模板

select 'with tmp(table_name, row_number) as (' from dual 
union all 
select 'select '''||table_name||''',count(*) from '||table_name||' union  ' from USER_TABLES 
union all
select 'select '''',0 from dual) select table_name,row_number from tmp order by row_number desc ;' from dual;
如何对所有表使用max(ora_rowscn)、SCN_TO_时间戳(max(ora_rowscn))


有没有关于更正查询语法的建议?

以下是我的建议。我不建议对所有表使用
SCN_TO_TIMESTAMP
,因为它会抛出很多ORA-01405

select 'with tmp(table_name, max_rscn, ct) as (' from dual 
union all 
select 'select '''||table_name||''',max(ora_rowscn), count(*) from '||table_name||' union  ' from USER_TABLES 
union all
select 'select '''',0,0 from dual) select table_name, max_rscn from tmp;' from dual;

您可以使用这样一个包含
executeimmediate
的PLSQL代码,以便通过动态SQL获得所需的值

SET SERVEROUTPUT ON

DECLARE        
  v_rowscn NUMBER;
  v_tmstp  TIMESTAMP;
BEGIN
 FOR c IN 
 (SELECT t.table_name FROM user_tables t)
 LOOP
  BEGIN 
    EXECUTE IMMEDIATE 'SELECT max(ora_rowscn),SCN_TO_TIMESTAMP(max(ora_rowscn)) FROM '||
                               c.table_name INTO v_rowscn, v_tmstp;
    DBMS_OUTPUT.PUT_LINE( c.table_name||' - max_scn : '|| v_rowscn||
                         ' - max_scn_timestamp : '|| v_tmstp );
   EXCEPTION WHEN others THEN  DBMS_OUTPUT.PUT_LINE( sqlerrm );
  END;
 END LOOP;
END;
/ 

只要每个表都没有出现任何异常。

@Kinfinity我需要从这两列中获取数据max(ora_rowscn)、SCN_to_TIMESTAMP(max(ora_rowscn)),非常感谢,但是如果我需要筛选模式和表列表,我不知道您的筛选规则,但只需添加WHERE条件来替换查询,例如
。。。如果表名像“R%”
为了只显示以字母
R
@rakesh开头的表,为了进行测试,我已经对架构和表进行了筛选,匿名块也完成了,但是如何查看结果?在调用
DBMS\u OUTPUT之前,您是否发出了
打开了设置服务器输出。请将行
@rakesh?oops i忘了说它现在可以工作了,一个问题是如何获得时间戳值?