すでにデータがある場合にCHAR
(17バイト)をCHAR
(16バイト)に変更するにはどうすればよいですか?
値は次のようなものです:
012345-000-00001
列サイズを変更する前に、最初にそれをトリミングしようとしましたが、列がすでに16バイトより大きいためにエラーが発生します(最後のスペースのため)。
よろしくお願いします!
既存の列定義の変更
空でないCHAR列の長さを短くするには、初期化パラメータ
BLANK_TRIMMING=TRUE
を設定する必要があります。
SQL> show parameter BLANK_TRIMMING;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
blank_trimming boolean FALSE
SQL> alter system set BLANK_TRIMMING=true scope=spfile;
System altered.
Then bounce the database.
SQL> startup force;
SQL> update tblchar set col1=TRIM(col1);
SQL> alter table tblchar modify col1 char(16 byte);
Table altered.
ドキュメント:テーブルの変更
別のメソッドを追加しましょう。
別の列をテーブルに追加し、データを新しい列にコピーし、古い列を削除し、新しい名前を古い列に変更します。
ALTER TABLE t
ADD (col2 CHAR (16));
UPDATE t
SET col2 = TRIM (col1);
ALTER TABLE t
DROP (col1);
ALTER TABLE t
RENAME COLUMN col2 TO col1;
編集:影響を受ける可能性のある新しいインデックスを作成することを忘れないでください。