С помощью команд переименования столбца вида
ALTER TABLE KK_TBL RENAME COLUMN ID TO ID2;
И с помощью динамического SQL переименовать все поля ID в таблицах текущей схемы, начинающихся с 'KK', в поля ID2.
При решении нужно не забыть, что в USER_TAB_COLUMNS есть не только нужная нам информация о таблицах, но и лишняя для нас информация о вьюшках. Кроме того, у нас не получится переименовать столбец ID в столбец ID2, если в таблице уже есть другой столбец ID2, в этом случае мы не будем ничего переименовывать.
Переименовываем:
BEGIN
FOR Z IN (SELECT UTC.TABLE_NAME
FROM USER_OBJECTS UO, USER_TAB_COLUMNS UTC
WHERE UO.OBJECT_TYPE = 'TABLE'
AND UO.OBJECT_NAME = UTC.TABLE_NAME
AND UTC.TABLE_NAME LIKE 'KK%'
AND UTC.COLUMN_NAME = 'ID'
MINUS
SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'ID2') LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || Z.TABLE_NAME ||
' RENAME COLUMN ID TO ID2';
END LOOP;
END;
Проверим:
SELECT UO.OBJECT_TYPE, UTC.TABLE_NAME, UTC.COLUMN_NAME
FROM USER_OBJECTS UO, USER_TAB_COLUMNS UTC
WHERE UO.OBJECT_NAME = UTC.TABLE_NAME
AND UTC.TABLE_NAME LIKE 'KK%'
AND UTC.COLUMN_NAME IN ('ID', 'ID2');
Переименовываем обратно ID2 в ID:
BEGIN
FOR Z IN (SELECT UTC.TABLE_NAME
FROM USER_OBJECTS UO, USER_TAB_COLUMNS UTC
WHERE UO.OBJECT_TYPE = 'TABLE'
AND UO.OBJECT_NAME = UTC.TABLE_NAME
AND UTC.TABLE_NAME LIKE 'KK%'
AND UTC.COLUMN_NAME = 'ID2'
MINUS
SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'ID') LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || Z.TABLE_NAME ||
' RENAME COLUMN ID2 TO ID';
END LOOP;
END;