Oracle SQL находит самый высокий ID среди всех таблиц - PullRequest
2 голосов
/ 04 августа 2011

Каждая из моих таблиц имеет поле "id". Мне нужно иметь возможность найти самый высокий идентификатор для всех из них, учитывая, что список таблиц может измениться.

Есть ли способ получить список таблиц в базе данных Oracle, объединить их строки (только идентификаторы) и затем получить max()?

P.S. Это для обновления последовательности, которая вышла из строя.

Ответы [ 3 ]

11 голосов
/ 04 августа 2011

Вот простой динамический 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 в запрос.

1 голос
/ 04 августа 2011

Как насчет этого?

 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 для всех таблиц, по которым вам нужно искать.

0 голосов
/ 04 августа 2011

как насчет запроса последовательности, которая управляет идентификаторами для CURRVAL ...

, если вам необходимо выяснить также, в какой таблице находится этот идентификатор, то создайте новую таблицу для централизованного отслеживания идентификатора и добавления триггеровзаполнить на вставке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...