こんにちは!平野です。

本日はOracleAPEXでテーブルを作成します。
Oracle APEXでは、テーブルを生成してから画面を作るのが基本的な手法となります。
このテーブルの作成がコードを書かずにGUI上でできてしまいます。今回はその方法について説明します。

Oracle APEXの環境を持っていない方は以下記事を参考にしてください。
ローコード開発ってどうやるの?(Oracle APEX)

更新履歴

日付更新概要
2020/09/08記事公開
2020/11/25記事更新

対応バージョン

製品名バージョン
Oracle APEX5.1 – 20.1.0.00.13
Oracle Database12.2 – 19.6

必要な要素を考える

簡単なタスク管理アプリを開発すると仮定し、以下のようなタスク管理アプリの機能で考えてみます。

  1. 複数の利用者(ユーザー)がタスクを入力
  2. 入力されたタスクは利用者ごとに確認可能
  3. タスク完了の予定日が近くなるとメールが飛ぶ
  4. タスクが完了したらデータを消す

まずは、テーブル作成に必要な要素を考えてみます。

テーブル名:TASK_LISTS

列名説明データ型スケールNULLを許可
ID作成されたタスクごとに付与NUMBERいいえ
USERNAMEタスクを作成したユーザーの名前VARCHAR2255いいえ
TASK_TITLEタスクのタイトルVARCHAR2255
TASK_CONTENTタスクの内容VARCHAR24000
TASK_DEADLINEタスクを完了すべき期日の設定DATE

>要素ごとのデータ型に関してはOracleの公式マニュアルSQL言語リファレンスを参考にしてくだい。

以上のように想定してみました。
このテーブルの定義をもとに、Oracle APEXのGUI操作でテーブルを作成していきます。

GUI操作の手順

GUI操作の手順を説明していきます。

  1. OracleAPEXにサインインして、SQLワークショップを開きます。
    画像1
  2. オブジェクト・ブラウザを開きます。
    画像2
  3. 右上の+マークをクリックして表を選択します。
    画像3
  4. 今回仮定したテーブル定義を入力します。
    画像4
  5. 新規順序から移入を選択し、主キーをIDとして下さい。
    画像5
  6. 外部キー・制約についてはそのまま設定せず次へを選択してください。必要となった場合は後から設定することも可能です。
  7. 表の作成を選択してください。
    画像6

今回GUI上で作成したテーブルのSQL文が自動生成されています。
表の作成ページにあるSQLというタブをクリックすると見ることができます。

CREATE table "TASK_LISTS" (
    "ID"               NUMBER(255) NOT NULL,
    "USERNAME"         VARCHAR2(255) NOT NULL,
    "TASK_TITLE"       VARCHAR2(4000),
    "TASK_CONTENT"     VARCHAR2(4000),
    "TASK_SUBCONTENTS" VARCHAR2(4000),
    "TASK_DEADLINE"    DATE,
    constraint  "TASK_LISTS_PK" primary key ("ID")
)
/

CREATE sequence "TASK_LISTS_SEQ" 
/

CREATE trigger "BI_TASK_LISTS"  
  before insert on "TASK_LISTS"              
  for each row 
begin  
  if :NEW."ID" is null then
    select "TASK_LISTS_SEQ".nextval into :NEW."ID" from sys.dual;
  end if;
end;
/   

これでテーブルが完成しました。

作成したテーブルは、オブジェクト・ブラウザ画面から参照できます。
最近作成された表から直接オブジェクト・ブラウザのTASK_LISTSテーブルを確認することもできます。
オブジェクト・ブラウザでは、列の追加や列名の変更などいつでも行うことができます。
画像7

おわりに

いかがだったでしょうか。
テーブルの要素だけ考えてしまえば5分もかからずテーブルを作成することができます。
もちろんSQLコマンドを直接記入してテーブルを作成することも可能です。
こういった開発における柔軟性がOracle APEXの強みの1つと言えます。

是非ともご参考にしていただければと思います。
ありがとうございました!