web-dev-qa-db-ja.com

CHAR(n BYTE)列の変更

すでにデータがある場合にCHAR(17バイト)をCHAR(16バイト)に変更するにはどうすればよいですか?

値は次のようなものです:

012345-000-00001

  • 最後にスペースがあります。

列サイズを変更する前に、最初にそれをトリミングしようとしましたが、列がすでに16バイトより大きいためにエラーが発生します(最後のスペースのため)。

よろしくお願いします!

2

既存の列定義の変更

空でない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.

ドキュメント:テーブルの変更

1
JSapkota

別のメソッドを追加しましょう。

別の列をテーブルに追加し、データを新しい列にコピーし、古い列を削除し、新しい名前を古い列に変更します。

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;

編集:影響を受ける可能性のある新しいインデックスを作成することを忘れないでください。

1
D. Mika