列のデフォルト値の指定について

Oracle Master Silver

Oracleデータベースで列にデフォルト値を指定することは、効率的なデータ入力とデータの一貫性を保つための重要な方法です。本記事では、デフォルト値の指定方法、注意点、そしてベストプラクティスを網羅的に解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


デフォルト値の指定方法

デフォルト値は、CREATE TABLE文またはALTER TABLE文を使用して設定できます。

新しいテーブルを作成する場合

CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    hire_date DATE DEFAULT SYSDATE,
    salary NUMBER DEFAULT 50000
);
  • hire_date列にはデフォルトで現在の日付(SYSDATE)が設定されます。
  • salary列にはデフォルトで50000が設定されます。

既存のテーブルにデフォルト値を追加する場合

ALTER TABLE employees
ADD COLUMN bonus NUMBER DEFAULT 1000;
  • 新たに追加されたbonus列には、デフォルト値として1000が設定されます。

デフォルト値の変更

ALTER TABLE employees
MODIFY salary DEFAULT 60000;
  • salary列のデフォルト値が60000に変更されます。

デフォルト値の削除

ALTER TABLE employees
MODIFY salary DEFAULT NULL;
  • salary列のデフォルト値が削除されます。

INSERT文の使用例

デフォルト値は、INSERT文で明示的に値を指定しない場合に自動的に適用されます。

デフォルト値を使用したデータ挿入

INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1, 'John', 'Doe');
  • この場合、hire_dateには現在の日付が、salaryには50000が自動的に設定されます。
SQL> SELECT column_name, data_default
2 FROM user_tab_columns
3 WHERE table_name = 'EMPLOYEES';

COLUMN_NAME DATA_DEFAULT
------------------------------ ------------------------------
EMPLOYEE_ID
FIRST_NAME
LAST_NAME
HIRE_DATE SYSDATE ★デフォルト値が設定されている
SALARY 50000 ★

SQL> INSERT INTO employees (employee_id, first_name, last_name)
2 VALUES (1, 'John', 'Doe');

1行が作成されました。

SQL> select * from employees;

EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE SALARY
----------- -------------------- -------------------- ------------------- ----------
1 John Doe 2025/01/13 20:22:59 50000 ★

デフォルト値をオーバーライドする

INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (2, 'Jane', 'Smith', 70000);
  • この場合、salary列にはデフォルト値の50000ではなく、明示的に指定された70000が設定されます。
SQL> INSERT INTO employees (employee_id, first_name, last_name, salary)
2 VALUES (2, 'Jane', 'Smith', 70000);

1行が作成されました。

SQL> select * from employees;

EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE SALARY
----------- -------------------- -------------------- ------------------- ----------
1 John Doe 2025/01/13 20:22:59 50000
2 Jane Smith 2025/01/13 20:32:40 70000 ★

デフォルト値の動作確認

SELECT employee_id, first_name, last_name, hire_date, salary
FROM employees;
  • 実行結果により、デフォルト値が正しく適用されていることを確認できます。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


注意点とベストプラクティス

  1. デフォルト値に指定できるデータ型
    • リテラル値(例: 数値、文字列、NULL)
    • システム関数(例: SYSDATE, USER
    • 算術式や文字列の結合(例: 10 * 2, 'default_' || 'value'
  2. デフォルト値とNOT NULL制約の組み合わせ
    • デフォルト値を指定した列にNOT NULL制約を設定することで、デフォルト値が必須の意味を持つようになります。
    CREATE TABLE departments ( department_id NUMBER PRIMARY KEY, department_name VARCHAR2(100) NOT NULL DEFAULT 'General' );
    • department_name列には必ず値が設定されます。値を指定しない場合は'General'が設定されます。
  3. 既存データへの影響
    • デフォルト値は新しく挿入される行に対して適用されます。
    • 既存の行の値は変更されません。
  4. デフォルト値としてのシーケンスの利用(Oracle Database 12c以降)
    • デフォルト値にシーケンスの次の値を指定することができます。
    CREATE TABLE projects ( project_id NUMBER DEFAULT project_seq.NEXTVAL PRIMARY KEY, project_name VARCHAR2(100) );
    • 新しいプロジェクトを挿入する際、project_idは自動的にシーケンスから生成されます。
  5. パフォーマンスへの影響
    • デフォルト値が複雑な計算や関数に依存している場合、挿入操作のパフォーマンスに影響を与える可能性があります。

デフォルト値の確認方法

デフォルト値が設定されているか確認するには、データディクショナリビューを使用します。

USER_TAB_COLUMNSビューの利用

SELECT column_name, data_default
FROM user_tab_columns
WHERE table_name = 'EMPLOYEES';
  • data_default列には、指定されたデフォルト値が表示されます。

具体例

例として、employeesテーブルのデフォルト値を確認した結果は以下のようになります。

COLUMN_NAMEDATA_DEFAULT
HIRE_DATESYSDATE
SALARY50000
BONUS1000

具体的なユースケース

  1. 初期値の設定
    • 新しい従業員に標準的な給与やボーナスを自動で設定する。
  2. 日付の自動設定
    • レコードの挿入時にタイムスタンプを自動的に記録する。
  3. 一貫性の確保
    • デフォルト値を使用することで、データ入力時のミスや不整合を防ぐ。

まとめ

列のデフォルト値を活用することで、データベースの使いやすさと運用効率を大幅に向上させることができます。本記事では、基本的な設定方法から応用例までを網羅的に解説しました。適切なデフォルト値を設定し、より効率的なデータベース運用を目指してください。

何かご不明点や追加の質問がありましたら、ぜひコメントしてください!

[参考]
Oracle Database SQL言語リファレンス 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました