如何从所有表的表中获取特定列的最大值,该表在oracle模式中包含该列名?

时间:2019-03-29 20:09:22

标签: sql oracle

我有一个包含5000个表的Oracle模式,我检索了所有具有列名updt_dt_tmupdt_dt_time的表。现在,我需要一个附加列,该列为我提供了updt_dt_tmupdt_dt_time列(即时间戳列)的最大值。

当前,我检索到的表采用这种格式。

table_name column_name 1 updt_dt_tm 2 updt_dt_tm 3 updt_dt_time 4 updt_dt_tm 5 updt_dt_time 6 updt_dt_tm

要检索上表,这是我的直接查询。

select table_name, column_name from all_tab_columns where column_name='updt_dt_tm' or column_name='updt_dt_time' and owner = schema_name.

我正在尝试检索一个看起来像

的表

table_name column_name value 1 updt_dt_tm max(updt_date_tm) 2 updt_dt_tm max(updt_date_tm) 3 updt_dt_time max(updt_date_time) 4 updt_dt_tm max(updt_date_tm) 5 updt_dt_time max(updt_date_time) 6 updt_dt_tm max(updt_date_tm)

我尝试了StackOverflow的一些引用,但是它们不起作用。

SQL Loop through all tables and get the max value from a specific column

get max value for column and the same column for specific record at the same time

如果能得到帮助,我将不胜感激。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要plsql来实现这一目标。像这样:

declare
cursor c_tab is
select table_name, column_name 
from all_tab_columns 
where (column_name='updt_dt_tm' or column_name='updt_dt_time') 
and owner = schema_name;

v_sql varchar2(32000);

begin
    for r_tab in c_tab loop
       v_sql := 'select ' || 
                r_tab.table_name || ' table_name, ' || 
                r_tab.column_name || ' column_name, ' || 
                '(select max(' || r_tab.column_name || ') from ' || r_tab.table_name || ') value ' ||
                'from dual';
        execute immediate v_sql;                
    end loop;
end;