我有一个包含5000个表的Oracle模式,我检索了所有具有列名updt_dt_tm
和updt_dt_time
的表。现在,我需要一个附加列,该列为我提供了updt_dt_tm
或updt_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
如果能得到帮助,我将不胜感激。
提前谢谢!
答案 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;