Oracle SQL在所有表中查找最高ID
我的每个表都有一个“id”字段。考虑到表列表可能会更改,我需要能够在所有表中找到最高的ID 有没有办法获取oracle数据库中的表列表,聚合它们的行(仅ID),然后获取Oracle SQL在所有表中查找最高ID,sql,oracle,aggregate,Sql,Oracle,Aggregate,我的每个表都有一个“id”字段。考虑到表列表可能会更改,我需要能够在所有表中找到最高的ID 有没有办法获取oracle数据库中的表列表,聚合它们的行(仅ID),然后获取max() 顺便说一句,这是用来更新一个发生故障的序列。这个怎么样 SELECT MAX(ID) FROM ( SELECT MAX(ID) AS ID FROM CUSTOMER UNION ALL SELECT MAX(ID) AS ID FROM EMPLOYEE UNION ALL
max()
顺便说一句,这是用来更新一个发生故障的序列。这个怎么样
SELECT MAX(ID)
FROM
(
SELECT MAX(ID) AS ID FROM CUSTOMER
UNION ALL
SELECT MAX(ID) AS ID FROM EMPLOYEE
UNION ALL
SELECT MAX(ID) AS ID FROM MANAGER
);
对需要搜索的所有表重复UNION ALL。查询驱动当前id的序列如何
如果还需要找出该id所在的表,则构建一个新表以集中跟踪该id,并添加触发器以在插入时填充。以下是一些简单的动态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>
如果sequence services表跨多个架构,则需要删除所有的\u TAB\u列,并在查询中包含OWNER。p.s.我真诚希望您使用的是序列,而不是询问此问题,因为您希望为下一次插入增加id…这是为了更新序列!如果是oracle序列,那么这是一次性的工作,您不需要管理新的或更改的表。如果是您自己的序列,则转换为oracle序列:)CURRVAL仅适用于已通过NEXTVAL调用调用该序列的会话。我们可以使用
从用户\u序列中选择最后一个\u编号
获得序列的当前界限。但是,在某些情况下,如果没有使用序列来分配主键值(例如大容量数据加载过程),这将不会有帮助。然后,使用该序列的例程将生成冲突。我认为情况就是这样。这非常接近,但我正在寻找一个声明,如果我添加更多的表,它仍然有效,并且不需要每次添加一个表时都进行更新。有什么办法吗?我最初得到了一个ORA-01426:numeric overflow
,但我将l_id和max_id类型更改为numeric
,与我的id列内联,这非常有效。非常感谢!