ホーム » DB関連 » プライマリキー・INDEX名一括変更スクリプト

プライマリキー・INDEX名一括変更スクリプト

   作者:ビズコネクトポータル   发布时间:2014-02-20   

プライマリキーやINDEX名は付けない時に、自動生成のオブジェクト名は「SYS_XXXXXXXX」となります。
本来、この名称でも問題ないですが、移行する際にエラー発生するとの報告を受けていますので、
一括変更のスクリプトを作成しました。

DECLARE
  EXEC_SQL  VARCHAR2(2000);
  NEW_NAME  VARCHAR2(2000);
BEGIN
 --1.プライマリキー名変更
 FOR CUR IN (SELECT * FROM  USER_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'P' AND  CONSTRAINT_NAME  LIKE 'SYS%' )
 LOOP
   -- オブジェクト名は最大30バイト
   NEW_NAME := 'PKEY_' || CUR.TABLE_NAME;
   IF LENGTHB(NEW_NAME) > 30  THEN
       NEW_NAME := SUBSTR(NEW_NAME, 1,30);
   END IF;
   -- Pキー変更
   EXEC_SQL := 'ALTER TABLE ' || CUR.TABLE_NAME || ' RENAME CONSTRAINT ' || CUR.CONSTRAINT_NAME || ' TO ' ||  NEW_NAME;
   EXECUTE IMMEDIATE EXEC_SQL;
   -- インデックス名変更
   EXEC_SQL := 'ALTER INDEX ' || CUR.CONSTRAINT_NAME ||  ' RENAME TO ' ||  NEW_NAME;
   EXECUTE IMMEDIATE EXEC_SQL;
 END LOOP;

 --2.インデックス名変更
 FOR CUR IN (SELECT * FROM USER_INDEXES  WHERE  INDEX_NAME LIKE 'SYS%'  )
 LOOP
   -- オブジェクト名は最大30バイト
   NEW_NAME := 'IDX_' || CUR.TABLE_NAME;
   IF LENGTHB(NEW_NAME) > 30  THEN
       NEW_NAME := SUBSTR(NEW_NAME, 1,30);
   END IF;
   -- インデックス名変更
   EXEC_SQL := 'ALTER INDEX ' || CUR.INDEX_NAME ||  ' RENAME TO ' ||  NEW_NAME;
   EXECUTE IMMEDIATE EXEC_SQL;
 END LOOP;
END;
/

此评论不代表本站观点大家说

《プライマリキー・INDEX名一括変更スクリプト》等您坐沙发呢!

发表评论

亲,不支持纯字母、符号评论哦~