Oracle SQL在所有表中查找最高ID

Jon*_*eah 2 sql oracle aggregate

我的每个表都有一个"id"字段.鉴于表的列表可能会发生变化,我需要能够在所有这些中找到最高的ID.

有没有办法在oracle数据库中获取表的列表,聚合它们的行(只有id),然后得到max()

PS这用于更新已经失败的序列.

APC*_*APC 11

这是一些简单的动态SQL驱动数据字典:

SQL> set serveroutput on
SQL> declare
  2      l_id pls_integer;
  3      max_id pls_integer;
  4      max_tab_name varchar2(30);
  5  begin
  6      max_id := 0;
  7      for r in ( select table_name
  8                 from user_tab_columns
  9                 where column_name = 'ID' )
 10      loop
 11          execute immediate 'select max(id) from '||r.table_name
 12              into l_id;
 13          if l_id > max_id
 14          then
 15              max_id := l_id;
 16              max_tab_name := r.table_name;
 17          end if;
 18      end loop;
 19      dbms_output.put_line('Highest score = '||max_id||' table='||max_tab_name);
 20  end;
 21  /
Highest score = 2010070705 table=SESSIONS

PL/SQL procedure successfully completed.

SQL>
Run Code Online (Sandbox Code Playgroud)

如果序列服务表跨多个模式,则需要驱动ALL_TAB_COLUMNS并在查询中包含OWNER.