Всем привет, этот скрипт я просто оставляю тут на будущее. Полдня потратил чтобы написать его самостоятельно, а потом нашел на 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;
/
Комментариев нет:
Отправить комментарий