我的每个表都有一个“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/