У меня есть некоторые безымянные ограничения на таблицу, которые начинаются с SYS_
.Я хочу назвать их условно с помощью TABLENAME_CONSTRAINTTYPE, например вместо SYS_C12345
Я хочу назвать его MyTable1_PK
Теперь проблема заключается в том, что мне нужно сделать это в нескольких средах и с именем ограниченияотличается от окружающей среды к окружающей среде.Поэтому я ничего не могу жестко запрограммировать, поскольку один и тот же сценарий будет запускаться во всех средах.
Я нашел способ динамического получения имени ограничения на основе имени столбца и типа ограничения:
SELECT acc.CONSTRAINT_NAME
FROM ALL_CONS_COLUMNS acc
INNER JOIN ALL_CONSTRAINTS ac
ON ( acc.CONSTRAINT_NAME = ac.CONSTRAINT_NAME )
WHERE ac.OWNER = 'SCHEMA1'
AND ac.TABLE_NAME = 'MY_TABLE1'
AND acc.COLUMN_NAME = 'MY_ID'
AND ac.CONSTRAINT_TYPE IN ('P')
AND acc.CONSTRAINT_NAME LIKE 'SYS_%'
но у меня проблемы с интеграцией с переименованием sql:
ALTER TABLE SCHEMA1.MY_TABLE1 RENAME CONSTRAINT '' TO MY_TABLE1_PK;
Может кто-нибудь указать мне правильное направление?