7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Oracle Cloud][Autonomous AI Database] Select AI機能検証用Oracle APEXアプリケーション作ってみた。(2026/03/03)

7
Posted at

はじめに

Oracle Databaseの自然言語によるクエリ実行(SELECT AI)機能を試してみたい。毎回コマンドを記入するのではなく、Webアプリケーションで簡単に試したい。といった場合にAutonomous AI DatabaseのOracle APEXを使ったアプリケーションを少ない手順で作成してみました。
SELECT AI機能は、dbms_cloud_ai.generate プロシージャで呼び出しています。

この記事で完成するアプリケーション

image.png

  • AIプロファイルを選択
  • 問い合わせを入力
  • SELECT AIで生成されたSQLの確認
  • SELECT AIで生成されたSQLの実行結果の確認
    • 検索結果はOracle APEXのクラシックレポート形式で表示

実行例

image.png

Oracle APEX SELECT AI アプリケーション 作成手順

前提条件

OCIチュートリアルなどを参考にAutonomous AI Database上にSELECT AIが実行できる環境の準備します。

  • Oracle Autonomous AI Databaseインスタンスの作成
  • Oracle APEXワークスペースの作成
  • APEXワークスペースのDBユーザーに DBMS_CLOUD_AI の実行権限を付与
  • APEXワークスペースのDBユーザーがアクセスできる表・データの準備
  • クレデンシャル情報の作成
  • AIプロファイルの作成

Step 1: Oracle APEXアプリケーション作成

  1. アプリケーション・ビルダー → 「作成」

  2. 「新規アプリケーション」 を選択

  3. 名前: SELECT AI アプリimage.png

  4. 「アプリケーションの作成」


Step 2: リージョンの作成(入力・SQL表示)

ページ 「1- ホーム」の編集します。

Page 1のページ・デザイナーで以下の2リージョンを作成します。

リージョン タイプ タイトル
Region 1 静的コンテンツ 入力
Region 2 静的コンテンツ 生成されたSQL

image.png

image.png
image.png


Step 3: ページ・アイテムの作成

ページ・アイテムを3つ作成します。

image.png

P1_AI_PROFILE(Region 1内)

属性
タイプ 選択リスト
ラベル AI プロファイル
LOVタイプ SQL クエリ
NULL表示値 - プロファイルを選択 -

LOV SQL:

SELECT profile_name d, profile_name r
FROM   user_cloud_ai_profiles
ORDER BY profile_name

image.png
image.png

P1_NATURAL_LANGUAGE(Region 1内)

属性
タイプ テキスト領域
ラベル 自然言語で質問を入力
高さ(行数) 4

image.png

P1_GENERATED_SQL(Region 2内)

image.png

属性
タイプ テキスト領域
ラベル 生成された SQL
高さ(行数) 6
ストレージ セッションごと(永続)
読取り専用 常時

image.png
image.png

ポイント: プロパティ・パネルの「ストレージ」セクションで設定を「セッションごと(永続)」にしてください。
image.png


Step 4: ボタンの作成

「Region 1」内に「生成」ボタンと「クリア」ボタンを作成します。

GENERATE ボタン(Region 1内)

image.png

属性
ラベル 生成
ボタン名 GENERATE
アクション ページの送信
ホット はい

image.png
image.png

CLEAR ボタン(Region 1内)

image.png

属性
ラベル クリア
ボタン名 CLEAR
アクション ページの送信

image.png
image.png

Step 5: Region 3 の作成と Classic Report(実行結果)の設定

実行結果を表示するリージョンを作成します。

Region 3 の作成

image.png

属性
タイプ Classic Report
タイトル 実行結果
ソース・タイプ Function Body Returning SQL Query

SQL問合せを返すPL/SQLファンクション本体:

BEGIN
  IF :P1_GENERATED_SQL IS NULL OR TRIM(:P1_GENERATED_SQL) IS NULL THEN
    RETURN 'SELECT ''SQLが生成されていません'' AS "ステータス" FROM DUAL';
  END IF;

  DECLARE
    l_sql VARCHAR2(32767) := TRIM(:P1_GENERATED_SQL);
  BEGIN
    -- AIがマークダウン形式(```sql ... ```)で返した場合に除去
    IF l_sql LIKE '```%' THEN
      l_sql := REGEXP_REPLACE(l_sql, '^```sql\s*', '', 1, 1, 'i');
      l_sql := REGEXP_REPLACE(l_sql, '^```\s*',    '', 1, 1, 'i');
      l_sql := REGEXP_REPLACE(l_sql, '\s*```$',    '', 1, 1, 'i');
      l_sql := TRIM(l_sql);
    END IF;

    IF UPPER(l_sql) NOT LIKE 'SELECT%' THEN
      RETURN 'SELECT ''有効なSELECT文が生成されませんでした'' AS "ステータス" FROM DUAL';
    END IF;

    RETURN l_sql;
  END;
END;

汎用列(Generic Columns)の設定

SELECT AIでは実行のたびにSQLの列構成が変わるため、列定義を固定せず汎用列を使用します。

  1. 「汎用列名の使用」 を選択
  2. 列数に 20 を入力して確定

ポイント: 汎用列(COL001〜COL020)を使うことで、生成SQLが返す列数・列名が変わっても ORA-00904 が発生しなくなります。列数に指定した数を超える列は表示されません。

image.png

属性タブ:

属性
レポートの行数 50(必要に応じて調整)

image.png


Step 6: ページ・プロセスの設定

ボタンをクリックした際の動作の定義として、プロセスを使用します。

この記事では動的アクションではなく「プロセス」を使用します。プロセスはページ送信(Submit)のサーバー側処理として実行されるため、ボタンクリック → ページ送信 → サーバー処理 → ページ再描画 という一連の流れで動作します。

左ナビゲーション(またはページ・デザイナー下部の「プロセス」タブ)→ 「作成」 を選択しまする。
image.png

Process 1: 「SQL生成」 プロセスの作成

「識別」セクション:

属性
名前 SQL生成
タイプ コードを実行
言語 PL/SQL

image.png

PL/SQL コード:

DECLARE
  l_sql CLOB;
BEGIN
  -- 入力チェック:AIプロファイル
  IF :P1_AI_PROFILE IS NULL THEN
    apex_error.add_error(
      p_message          => 'AIプロファイルを選択してください。',
      p_display_location => apex_error.c_inline_in_notification
    );
    RETURN;
  END IF;

  -- 入力チェック:自然言語
  IF :P1_NATURAL_LANGUAGE IS NULL THEN
    apex_error.add_error(
      p_message          => '質問を入力してください。',
      p_display_location => apex_error.c_inline_in_notification
    );
    RETURN;
  END IF;

  -- SQLを生成
  l_sql := dbms_cloud_ai.generate(
    action       => 'showsql',
    profile_name => :P1_AI_PROFILE,
    prompt       => :P1_NATURAL_LANGUAGE
  );

  :P1_GENERATED_SQL := l_sql;

EXCEPTION
  WHEN OTHERS THEN
    apex_error.add_error(
      p_message          => 'SQL生成エラー: ' || SQLERRM,
      p_display_location => apex_error.c_inline_in_notification
    );
END;

「サーバー側の条件」セクション(プロパティ・パネルを下にスクロール):

属性
ボタン押下時 GENERATE

image.png

Process 2: 「クリア」 プロセスの作成

image.png

「識別」セクション:

属性
名前 画面クリア
タイプ コードを実行
言語 PL/SQL

PL/SQL コード:

BEGIN
  :P1_AI_PROFILE       := NULL;
  :P1_NATURAL_LANGUAGE  := NULL;
  :P1_GENERATED_SQL     := NULL;
END;

image.png

「サーバー側の条件」セクション:

属性
ボタン押下時 CLEAR

image.png

動作確認

  1. アプリケーションの実行
  2. AIプロファイルを選択
  3. 自然言語で質問を入力
    例: "従業員数が100人以上の部門を売上順に表示して"
  4. [生成] ボタンをクリック
    → dbms_cloud_ai.generate (showsql) を実行
    → P1_GENERATED_SQL にSQLが格納される
    • [生成されたSQL] に SELECT文が表示される
    • [実行結果] にクエリ結果が表示される
  5. [クリア] ボタンで全項目をリセット

おわりに

SQL生成の確認に特化したシンプルなOracle APEXですので、SELECT AIの機能確認用途で使用します。

参考情報

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?