カラムの桁数を縮小する場合、登録済みのデータより小さいサイズの桁数には変更できません。
それでも桁数を縮小したい場合は、既存データのサイズを小さく変更しておく必要があります。
カラムの桁数を拡張及び縮小するサンプル
-- NAMEの桁数は3桁DESC TB_SAMPLE; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID VARCHAR2(4) NAMEVARCHAR2(3 CHAR)-- TB_SAMPLEのデータの中身(全て3桁)SELECT ID, NAME FROM TB_SAMPLE; ID NAME -------- ------------ 1 あああ 2 いいい 3 ううう-- カラム拡張(3桁から6桁に変更)ALTER TABLE TB_SAMPLE MODIFY (NAME VARCHAR2(6 CHAR));表が変更されました。-- データを6桁に変更UPDATE TB_SAMPLE SET NAME = 'いいいいいい' WHERE ID = 2; 1行が更新されました。-- TB_SAMPLEのデータの中身(ID=2のNAMEだけ6桁)SELECT ID, NAME FROM TB_SAMPLE; ID NAME -------- ------------ 1 あああ 2いいいいいい3 ううう-- カラム縮小(6桁から3桁に変更)ALTER TABLE TB_SAMPLE MODIFY (NAME VARCHAR2(3 CHAR));行1でエラーが発生しました。: ORA-01441: 大きすぎる値があるため、列の長さを減らせません。-- データの桁数を縮小させる(6桁から3桁に変更)UPDATE TB_SAMPLE X SET X.NAME = SUBSTR(X.NAME,1,3) WHERE EXISTS ( SELECT * FROM TB_SAMPLE Y WHERE Y.ID = X.ID AND 3 < LENGTH(Y.NAME) ) ;-- TB_SAMPLEのデータの中身SELECT ID, NAME FROM TB_SAMPLE; ID NAME -------- ------------ 1 あああ 2いいい3 ううう-- コミットCOMMIT;-- カラム縮小(6桁から3桁に変更)ALTER TABLE TB_SAMPLE MODIFY (NAME VARCHAR2(3 CHAR));表が変更されました。