内部的にはDBMS_DICTIONARYを呼び出しているとのことなので、Oracle Database 23ai RU 23.7およびOracle Database 19c RU 19.28以降にAPEX 26.1をインストールして利用できます(オラクルの公式ブログを参照)。
これまで利用できたDBMS_METADATAやDBMS_DEVELOPERとの関連や、パッケージAPEX_DB_DICTIONARY全般ついては、Jan Květinaさんが彼のブログで紹介しています。
Describe tables to your AI with APEX_DB_DICTIONARY
https://www.oneoracledeveloper.com/2026/05/describe-tables-to-your-ai-with.html
本記事では、ファンクションAPEX_DB_DICTIONARY.GET_TABLE_INFOを呼び出し、マークダウンまたはテキスト形式で表/ビュー定義を出力しファイルとしてダウンロードするAPEXアプリを、Oracle APEX 26.1で作成してみました。
download-directory.github.ioからZIP形式でダウンロードすると、APEXワークスペースにそのままインポートできます。
ホーム・ページにAPEX_DB_DICTIONARY.GET_TABLE_INFOに与える全ての引数を、ページ・アイテムとして配置しています。APEX_DB_DICTIONARY.GET_TABLE_INFOの戻り値は、ページ・アイテムP4_DOCUMENTに保存しています。
ボタンGENERATEのクリックでAPEX_DB_DICTIONARY.GET_TABLE_INFOの呼び出し、ボタンDOWNLOADのクリックで、P4_DOCUMENTの内容をファイルとしてダウンロードしています。
APEX 26.1よりOracle AI Database 26ai限定ですが、アイテム・タイプがチェックボックス、切替え、非表示のときに、セッション・ステートのデータ型にBOOLEANを選択できるようになっています。ただし、API呼び出しの引数としてはBOOLEAN型のページ・アイテムはサポートしていないことのことなので、今回は利用できません。その他にも利用上の制限があるようです(リリース・ノート 2.10 Page Item Session State Data Type BOOLEAN)
追記終了
デフォルトの使用をオフにすると、オン値(オンとみなす文字列)、オン・ラベル、オフ値(オンとみなす文字列)、オフ・ラベルを設定できます。
切替えの設定のデフォルト値は、共有コンポーネントのコンポーネント設定に含まれています。
コンポーネント設定に切替えが含まれます。
切替えの表示スタイルやオン値、オン・ラベル、オフ値、オフ・ラベルのデフォルト値を設定できます。
ボタンGENERATEをクリックしたときに、プロセスGENERATEを実行します。識別のタイプにAPIの呼出しを選択し、呼出しにパッケージAPEX_DB_DICTIONARYのファンクションGET_TABLE_INFOを呼び出します。
ファンクションの結果を含む引数は、それぞれページ・アイテムに紐づけられます。ページ・アイテムのタイプが切替えの場合、文字列としてはオン値かオフ値を含みます。
パラメータのデータ型がBOOLEANの場合、ページ・アイテムに保存されているオン値およびオフ値を、BOOLEAN型のTrueかFalseとして認識するためにの文字列を設定する必要があります。切替えの定義にオン値やオフ値として認識される文字列が設定されていますが、それと同じ値をTrue値およびFalse値として設定する必要があります。
出力されたテキストをダウンロードするために、ボタンDOWNLOADをクリックしたときのトリガー・アクションとしてダウンロードをを実行します。
トリガー・アクションはAPEX 26.1で導入されたアクションです。動作のアクションとして選択できます。イベントがクリックのときに呼び出される動的アクションとほぼ同じ(スロットリングなどの細かい制御はできない)です。
ソースのSQL問合せとして、以下を記述します。ダウンロードの動的アクションはAPEX 24.1で追加された機能ですが、それまでに記述する必要があったコードのほとんどを不要にしました。
select
:P1_DOCUMENT content
,case when :P1_FORMAT = 1 then 'table.md' else 'table.txt' end filename
,case when :P1_FORMAT = 1 then 'text/markdown' else 'text/plain' end mimetype
from dual
サンプル・データのEMP/DEPTをインストールし、コメントやアノテーションを追加します。GPT-5.5で生成した、こちらのスクリプトを実行します。
作成したAPEXアプリケーションで生成したマークダウンは以下です。
# Table: EMP
Comment: 従業員マスタ。従業員の基本情報、所属組織、上司および給与情報を管理する。
## Columns:
- EMPNO - NUMBER(4) NOT NULL [pk]
- ENAME - VARCHAR2(50)
- JOB - VARCHAR2(50)
- MGR - NUMBER(4) [fk]
- HIREDATE - DATE
- SAL - NUMBER(7,2)
- COMM - NUMBER(7,2)
- DEPTNO - NUMBER(4) [fk]
## Column Comments:
- EMPNO - 従業員番号
- ENAME - 従業員氏名
- JOB - 職種
- MGR - 直属上司の従業員番号
- HIREDATE - 入社日
- SAL - 基本給与
- COMM - 歩合給
- DEPTNO - 所属部署番号
## Column Display Attributes:
- EMPNO
- business-term: Employee Identifier
- pii: No
- ENAME
- business-term: Employee Name
- pii: Yes
- searchable: Yes
- JOB
- business-term: Job Title
- MGR
- business-term: Manager Identifier
- HIREDATE
- business-term: Hire Date
- SAL
- business-term: Base Salary
- sensitivity: Confidential
- COMM
- business-term: Commission Amount
- sensitivity: Confidential
- DEPTNO
- business-term: Department Identifier
## Constraints:
- EMP_PK - PRIMARY KEY (EMPNO)
- EMP_MGR_FK - FOREIGN KEY (MGR) -> EMP(EMPNO)
- EMP_DEPT_FK - FOREIGN KEY (DEPTNO) -> DEPT(DEPTNO)
## Indexes:
- EMP_PK - UNIQUE (EMPNO)
- EMP_1 - NONUNIQUE (MGR)
- EMP_2 - NONUNIQUE (DEPTNO)
## Table Attributes:
- business-object: Employee
- data-classification: Internal
- data-owner: Human Resources Department
- subject-area: Human Resources
# Table: DEPT
Comment: 部署マスタ。組織内の部署および所在地情報を管理する。
## Columns:
- DEPTNO - NUMBER(4) NOT NULL [pk]
- DNAME - VARCHAR2(50)
- LOC - VARCHAR2(50)
## Column Comments:
- DEPTNO - 部署番号
- DNAME - 部署名
- LOC - 所在地
## Column Display Attributes:
- DEPTNO
- business-term: Department Identifier
- DNAME
- business-term: Department Name
- LOC
- business-term: Department Location
## Constraints:
- DEPT_PK - PRIMARY KEY (DEPTNO)
## Indexes:
- DEPT_PK - UNIQUE (DEPTNO)
## Table Attributes:
- business-object: Department
- data-classification: Internal
- data-owner: Human Resources Department
- subject-area: Human Resources
データベースのディクショナリを参照すると、実際の定義と参照している定義が乖離することはありません。しかし、データベースのスキーマが更新されることは(特にリレーショナル・データベースでは)一般的に少なく、AIエージェントが参照しやすいようにテキストに落としておくのもひとつの方法でしょう。
今回の記事は以上になります。
完










