【Oracle SQL】作成済みテーブルのカラム定義を変更する方法!

どうも、しぐまです!

開発をしているとテーブルを作成した後に仕様変更などでテーブルカラムの定義を変更しなければならない、なんてことがあったりします。

テーブルを削除して、CREATE文を修正してテーブル再作成・・・をしていると、中身のデータのバックアップを取っておいて、再作成後にINSERTしないといけなくなり、面倒です。

しかし、そんな面倒なことをしなくてもOracle SQLにはテーブル定義を変更するALTER TABLE文に、データを保持したままテーブルカラムの定義を変更してくれるのMODIFY句が用意されています!

例えば、下記のようなテーブル定義・データが存在するとします。

EMP_IDEMP_NAMEEMP_AGE
001taro25
002miki23
003hironobu33

では、このEMPLOYEEテーブルへ「emp_name = “kyarypamyupamyu”」のデータを挿入してみましょう。結果はこうなります。

『次のコマンドの開始中にエラーが発生しました : 行 10 –
ORA-12899: 列”EMPLOYEE”.”EMP_NAME”の値が大きすぎます(実際: 15、最大: 10)』

当然の結果ですね、テーブル定義では10BYTE分しかカラムサイズを用意していないので、15BYTEの文字列はサイズ溢れでエラーになっています。

それでは、このデータがテーブルへ保管できるように「emp_name」カラムのサイズを10BYTE から20BYTEに拡張してみましょう。SQLは以下のように記述します。

<カラムサイズ変更>

このSQL実行後は、先ほどエラーになったINSERT文が正常終了するようになります。

また、このMODIFY関数はテーブルカラムのデフォルト値の変更や、NOT NULL制約の付与・削除なども行えます。

<デフォルト値の変更>

<NOT NULL制約の付与>

<NOT NULL制約の削除>

 

注意点!

上記のようにカラム定義のサイズを拡張する場合は、中身のデータを考慮する必要はないのですが、サイズを縮小する場合は、中のデータに縮小後のサイズよりも大きいサイズの文字列が含まれているとエラーとなりますので、注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です