概要:このチュートリアルでは、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_date
members
というテーブルに追加します。
ALTER TABLE members ADD birth_date DATE NOT NULL;
この例では、birth_date
DATE
カラムであり、nullを受け付けません。
例えば、ある行が作成されたり更新されたりした時間を記録したいとします。 そのためには、以下のように2つのカラム created_at
updated_at
を追加する必要があります。
ALTER TABLE members ADD( created_at TIMESTAMP WITH TIME ZONE NOT NULL, updated_at TIMESTAMP WITH TIME ZONE NOT NULL );
created_at
updated_at
TIMESTAMP WITH TIME ZONE
です。
テーブルにカラムが存在するかどうかを確認するには、user_tab_cols
ビューからデータを照会します。
SELECT COUNT(*)FROM user_tab_colsWHERE column_name = 'FIRST_NAME' AND table_name = 'MEMBERS';
このクエリは、カラムを追加する前に、そのカラムがテーブルに存在するかどうかを確認したいときに便利です。
例えば、次のPL/SQLブロックは、members
effective_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_date
members
テーブルの最後に追加されます。 しかし、2回目以降に実行すると、次のようなメッセージが表示されます:
The column effective_date already exists
これは期待通りの結果です。
このチュートリアルでは、Oracle の ALTER TABLE ADD
column ステートメントを使用して、既存のテーブルに 1 つ以上のカラムを追加する方法を学びました。
- Was this tutorial helpful?