SQL

桁数の拡張と縮小

  • このエントリーをはてなブックマークに追加

カラムの桁数を縮小する場合、登録済みのデータより小さいサイズの桁数には変更できません。

それでも桁数を縮小したい場合は、既存データのサイズを小さく変更しておく必要があります。

カラムの桁数を拡張及び縮小するサンプル

-- NAMEの桁数は3桁
DESC TB_SAMPLE; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID VARCHAR2(4) NAME
VARCHAR2(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));
表が変更されました。
  • このエントリーをはてなブックマークに追加

コメントを残す

*