YandexDirect

08 сентября 2020

Обновление сиквенсов или последовательностей в Oracle Database

 Всем привет, этот скрипт я просто оставляю тут на будущее. Полдня потратил чтобы написать его самостоятельно, а потом нашел на stackoverflow за полчаса. 

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

Что делает скрипт, выполняется проход по таблицам в которых используются сиквенсы, считается количество записей и этим количеством +1 обновляются сиквенсы, параметр start with. 



DECLARE

curr_mx NUMBER;

BEGIN

FOR lrec IN (

SELECT

ucc.table_name,

ucc.column_name

FROM

user_constraints uc

JOIN user_cons_columns ucc ON ucc.table_name = uc.table_name

AND ucc.constraint_name = uc.constraint_name

JOIN user_tab_columns utc ON utc.table_name = ucc.table_name

AND utc.column_name = ucc.column_name

WHERE

uc.constraint_type = 'P' -- primary key

AND utc.data_type = 'NUMBER' -- only numeric columns

) LOOP

EXECUTE IMMEDIATE 'select max ('

|| lrec.column_name

|| ') from '

|| lrec.table_name

INTO curr_mx;

IF curr_mx IS NULL THEN

curr_mx := 0;

END IF;

dbms_output.put_line('CREATE SEQUENCE "'

|| user

|| '"."'

|| lrec.table_name

|| '_'

|| lrec.column_name

|| '_SEQ" '

|| ' START WITH '

|| to_char(curr_mx + 1)

|| ';');

END LOOP;

END;

/

Комментариев нет:

Отправить комментарий

Общее·количество·просмотров·страницы