我的每个表都有一个“id”字段。鉴于表列表可能会更改,因此我需要能够在所有这些表中找到最高的ID。

有什么方法可以获取oracle数据库中的表列表,汇总其行(仅包含id),然后获取max()

附言这是为了更新已经过时的序列。

最佳答案

这是一些简单的动态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>

如果序列服务表跨越多个模式,则将需要删除ALL_TAB_COLUMNS并在查询中包括OWNER。

关于sql - Oracle SQL在所有表中查找最高ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6934678/

10-16 16:25
查看更多