Articles

Oracle ALTER TABLE ADD Column By Examples

Posted on

概要:このチュートリアルでは、OracleのALTER TABLE ADD columnステートメントを使用して、1つまたは複数のカラムをテーブルに追加する方法を学びます。

テーブルに新しいカラムを追加するには、次のように ALTER TABLE ステートメントを使用します:

ALTER TABLE table_name ADD column_name data_type constraint;

このステートメントでは。

  • まず、句の後に、新しいカラムを追加したいテーブルの名前を指定します。
  • 次に、カラム名、データ型、制約を指定します。

テーブルにすでに存在するカラムを追加することはできません。 また、ALTER TABLE ADD columnステートメントは、テーブルの最後に新しいカラムを追加します。

複数のカラムを追加する場合は、次の構文を使用します。

この構文では、2 つのカラムをコンマで区切ります。

Oracle ALTER TABLE ADD columnの例

デモのためにmembersという名前のテーブルを作成してみましょう。

CREATE TABLE members( member_id NUMBER GENERATED BY DEFAULT AS IDENTITY, first_name VARCHAR2(50), last_name VARCHAR2(50), PRIMARY KEY(member_id));

以下のステートメントは、birth_datemembersというテーブルに追加します。

ALTER TABLE members ADD birth_date DATE NOT NULL;

この例では、birth_dateDATEカラムであり、nullを受け付けません。

例えば、ある行が作成されたり更新されたりした時間を記録したいとします。 そのためには、以下のように2つのカラム created_atupdated_at を追加する必要があります。

ALTER TABLE members ADD( created_at TIMESTAMP WITH TIME ZONE NOT NULL, updated_at TIMESTAMP WITH TIME ZONE NOT NULL );

created_atupdated_atTIMESTAMP WITH TIME ZONE です。

テーブルにカラムが存在するかどうかを確認するには、user_tab_colsビューからデータを照会します。

SELECT COUNT(*)FROM user_tab_colsWHERE column_name = 'FIRST_NAME' AND table_name = 'MEMBERS';

このクエリは、カラムを追加する前に、そのカラムがテーブルに存在するかどうかを確認したいときに便利です。

例えば、次のPL/SQLブロックは、memberseffective_dateカラムがあるかどうかを、追加する前にチェックします。

SET SERVEROUTPUT ON SIZE 1000000DECLARE v_col_exists NUMBER BEGIN SELECT count(*) INTO v_col_exists FROM user_tab_cols WHERE column_name = 'EFFECTIVE_DATE' AND table_name = 'MEMBERS'; IF (v_col_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE members ADD effective_date DATE'; ELSE DBMS_OUTPUT.PUT_LINE('The column effective_date already exists'); END IF;END;/

このブロックを最初に実行すると、effective_datemembersテーブルの最後に追加されます。 しかし、2回目以降に実行すると、次のようなメッセージが表示されます:

The column effective_date already exists

これは期待通りの結果です。

このチュートリアルでは、Oracle の ALTER TABLE ADD column ステートメントを使用して、既存のテーブルに 1 つ以上のカラムを追加する方法を学びました。

  • Was this tutorial helpful?

コメントを残す

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