我想重命名具有以'SYS'開頭的默認名稱的許多約束(PK,FK,...等),以便能夠將相同的數據插入到其他數據庫中。如何重命名Oracle上的默認約束?
我發現我改成得到我想要下面的腳本:
BEGIN
FOR cn IN (
SELECT constraint_name
FROM user_constraints
WHERE constraint_type = 'P'
AND table_name = 'SPECIALITE'
)
LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || cn.table_name || ' RENAME CONSTRAINT ' || cn.constraint_name || ' TO PK_' || 'SPECIALITE';
END LOOP;
END;
這個腳本的工作,但似乎有點複雜,我,我不知道是否存在類似:
ALTER TABLE 'SPECIALITE' RENAME CONSTRANT (....)
問題是我不知道約束的名稱,他們有一個默認的名字,我只知道他們在哪裏。
可能嗎?
我認爲你運氣不好。有'alter table xyz drop | enable | disable primary key',但'rename'不支持該語法。 –
如果你知道約束列,你可以刪除並重新創建它 - 如果你使用ALTER TABLE SPECIALITE DROP PRIMARY KEY KEEP INDEX;那麼你可以添加一個新的PK而不必重建索引,儘管這樣會保留舊的系統生成的名稱。但是如果你不這樣做 - 而且當你重命名很多時,你可能不會這麼做 - 那麼你必須動態地找到它們,所以你現在擁有的將會更簡單。 –
爲什麼不使用具有表名,約束名稱和其他相關信息的user_cons_columns。 – XING