Oracle、Microsoft、OpenAIの発表では、OpenAIが利用するAIインフラをMicrosoft Azureに加えてOracle Cloud Infrastructure(OCI)へ拡張することが公表されました。
Oracle Autonomous DatabaseのSelect AIを使用すると、自然言語からOracle SQLを生成し、データベースへ問い合わせることができます。たとえば、「最も売れた商品はどれだけ売れましたかしら?」のような日常的な表現でも問い合わせできます。
生成AIの大規模言語モデル(LLM)とOracle SQLを組み合わせることで、利用者はSQLそのものではなく「何を知りたいか」という意図を記述できます。Select AIは、対象スキーマのメタデータを基にSQLを生成します。
Select AIの設定には、Autonomous DatabaseのDBMS_CLOUD_AIパッケージを使用します。このパッケージにより、OpenAI、OCI Generative AI、Cohere、Azure OpenAI ServiceなどのAIプロバイダーと連携できます。
本記事では、OpenAI APIと低コストなgpt-5-nanoを使用してSelect AIを試します。
■ OpenAI APIキーの取得
OpenAI APIを使用するには、OpenAI API PlatformでAPIキーを作成し、API側の課金設定を行います。ChatGPTの有料プランとOpenAI APIの料金は別管理です。
APIキーはパスワードと同様の機密情報です。ブログ、Gitリポジトリ、チャット、スクリーンショットへ実際のキーを掲載しないでください。漏えいした可能性がある場合は、API Platformで直ちにキーを無効化し、新しいキーを作成します。
● OpenAIへログイン
1)OpenAI API Platformへログイン
OpenAI API Platformへアクセスしてログインします。
2)API Platformを開く
APIの管理画面を開きます。
3)API Keys画面を開く
画面構成は変更される場合があります。現在のUIでは、プロジェクトのAPI Keys画面からキーを管理できます。
4)新しいSecret Keyを作成
Create new secret keyをクリックします。
5)キー名と権限を設定
用途が分かる名前を設定し、必要最小限の権限でSecret Keyを作成します。
6)Secret Keyを安全に保存
Secret Keyの完全な値を確認できるのは、通常、作成直後だけです。安全なパスワード管理ツールなどへ保存します。
7)作成結果を確認
API Keys画面に新しいキーが追加されたことを確認します。
■ Autonomous Databaseの作成
今回はAutonomous Data Warehouseを作成します。
● Autonomous Data Warehouseの作成
1)OCIコンソールを開く
Oracle Cloud Infrastructure(OCI)へログインし、ナビゲーション・メニューからOracle Database → Autonomous Databasesを選択します。
2)Autonomous Databaseを作成
Create Autonomous Databaseをクリックします。
3)Autonomous Data Warehouseを構成
必要な項目を入力し、Autonomous Data Warehouseを作成します。
4)作成完了を確認
● Database Clientの設定
1)SQLclのインストールとAutonomous Databaseへの接続
接続元のPCまたはComputeインスタンスへDatabase Clientをインストールします。今回はSQLclを使用します。
2)日本語を扱うための文字コード設定
ターミナルをUTF-8で動作させます。Instant Clientなど、NLS_LANGを参照するクライアントも併用する場合は、環境に合わせて設定します。
環境変数の設定例
[opc@tokyo-inst ~]$ export LANG=en_US.UTF-8
[opc@tokyo-inst ~]$ export NLS_LANG=Japanese_Japan.AL32UTF8
[opc@tokyo-inst ~]$ env | grep -E '^(LANG|NLS_LANG)='
LANG=en_US.UTF-8
NLS_LANG=Japanese_Japan.AL32UTF8
ログイン時に自動設定する場合は、.bash_profileなどへ記述します。ORACLE_HOMEは実際のインストール先に合わせて変更してください。
[opc@tokyo-inst ~]$ cat ~/.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_BASE="$HOME/oracle"
export ORACLE_HOME="$HOME/oracle/instantclient_21_11"
export PATH="$PATH:$ORACLE_HOME"
export LD_LIBRARY_PATH="$ORACLE_HOME"
export TNS_ADMIN="$ORACLE_HOME/network/admin"
export LANG="en_US.UTF-8"
export NLS_LANG="Japanese_Japan.AL32UTF8"
alias cdn='cd "$TNS_ADMIN"'
■ Select AIの設定
● ユーザーの作成とロール/権限の付与
Select AIを使用するデータベース・ユーザーを作成します。
1)ADMINユーザーでSQLcl接続
[opc@tokyo-inst ~]$ sql admin/<ADMIN_PASSWORD>@ADW
SQLcl: Release 24.2 Production
Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
SQL>
2)ADB_USERを作成
CREATE USER adb_user IDENTIFIED BY "Your_Strong_Password";
GRANT DWROLE, UNLIMITED TABLESPACE TO adb_user;
付与したロールとシステム権限を確認します。
SELECT grantee, granted_role
FROM dba_role_privs
WHERE grantee = 'ADB_USER';
SELECT grantee, privilege
FROM dba_sys_privs
WHERE grantee = 'ADB_USER';
● DBMS_CLOUD_AIパッケージへのアクセス権を付与
管理者権限で、ADB_USERからOpenAI APIへHTTPS接続できるようにACLを設定し、DBMS_CLOUD_AIの実行権限を付与します。
1)api.openai.comへのHTTPアクセスを許可
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'api.openai.com',
ace => XS$ACE_TYPE(
privilege_list => XS$NAME_LIST('http'),
principal_name => 'ADB_USER',
principal_type => XS_ACL.PTYPE_DB
)
);
END;
/
2)DBMS_CLOUD_AIの実行権限を付与
GRANT EXECUTE ON DBMS_CLOUD_AI TO adb_user;
権限を確認します。
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE grantee = 'ADB_USER'
AND table_name = 'DBMS_CLOUD_AI';
GRANTEE OWNER TABLE_NAME PRIVILEGE
___________ ___________________ ________________ ____________
ADB_USER C##CLOUD$SERVICE DBMS_CLOUD_AI EXECUTE
● OpenAIを利用するための準備
1)ADB_USERとして接続
CONN adb_user/Your_Strong_Password@ADW
SHOW USER
USER is "ADB_USER"
2)OpenAI APIのクレデンシャルを作成
DBMS_CLOUD.CREATE_CREDENTIALで、OpenAI APIへ接続するためのクレデンシャルOPENAI_CREDを作成します。passwordには、OpenAI API Platformで作成したSecret Keyを指定します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI',
password => 'sk-p2uycd5lYVQBtLLqK3|udqWxsRwT7ltOBDPMQpsA-OPENAI_API_KEY'
);
END;
/
同名のクレデンシャルがすでに存在し、作り直す場合のみ、事前に次を実行します。
BEGIN
DBMS_CLOUD.DROP_CREDENTIAL(
credential_name => 'OPENAI_CRED'
);
END;
/
3)DBMS_CLOUD_AIプロファイルを作成
DBMS_CLOUD_AI.CREATE_PROFILEで、Select AIが使用するAIプロファイルOPENAIを作成します。
主な属性は次のとおりです。
-
provider: AIプロバイダー。ここではopenai -
credential_name: OpenAI APIへ接続するクレデンシャル名 -
model: 使用するOpenAIモデル。ここではgpt-4o-mini -
object_list: 自然言語からSQLを生成する対象オブジェクト
この例では、SHサンプル・スキーマのCUSTOMERS、SALES、PRODUCTS、COUNTRIESを対象にします。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OPENAI',
attributes => '{
"provider": "openai",
"credential_name": "OPENAI_CRED",
"model": "gpt-4o-mini",
"object_list": [
{"owner": "SH", "name": "CUSTOMERS"},
{"owner": "SH", "name": "SALES"},
{"owner": "SH", "name": "PRODUCTS"},
{"owner": "SH", "name": "COUNTRIES"}
]
}'
);
END;
/
同名のプロファイルを作り直す場合のみ、事前に次を実行します。
BEGIN
DBMS_CLOUD_AI.DROP_PROFILE(
profile_name => 'OPENAI'
);
END;
/
Select AIは、対象オブジェクトの所有者名、オブジェクト名、列名、コメントなどのメタデータをAIプロバイダーへ送信します。機密性の高い名称やコメントを含むオブジェクトをobject_listへ登録する場合は、組織のセキュリティ・ポリシーを確認してください。
Sales History(SH)サンプル・スキーマは、販売データの分析や意思決定支援を想定したデモ用スキーマです。
● モデル変更
gpt-5-nanoを選択する理由
2026年7月21日時点で、Autonomous AI DatabaseのSelect AIドキュメントには、OpenAIプロバイダーの対応モデルとしてgpt-5-nanoが掲載されています。OpenAIのモデル案内は新しい世代へ更新されていますが、現行のSelect AI対応モデル一覧と直接APIの低コスト性を重視し、本記事ではgpt-5-nanoを選択します。
OpenAI APIの標準料金は、100万トークン当たり次のとおりです。
| モデル | 入力 | 出力 | 用途の考え方 |
|---|---|---|---|
gpt-5.4-nano |
$0.2 | $1.25 | 複雑なJOINや集計でnanoの精度が不足した場合の候補 |
gpt-5-nano |
$0.05 | $0.40 | 通常のSelect AIで最初に試す低コスト候補 |
gpt-4o-mini |
$0.15 | $0.60 | 旧構成との比較用。現行のAutonomous Select AIモデル一覧では未掲載 |
gpt-3.5-turbo (default) |
$0.50 | $1.50 | Model指定しなかった場合のデフォルト |
gpt-5-nanoはgpt-4o-miniと比べて、入力単価が約67%、出力単価が約33%安価です。Select AIではスキーマ・メタデータを含む入力が多く、生成するSQLは比較的短いため、入力単価の低さが効きやすいと考えられます。
たとえば、1回の問い合わせで入力5,000トークン、出力300トークンを使用した場合の概算は次のとおりです。
| モデル | 1回当たりの概算 |
|---|---|
gpt-5-nano |
$0.00037 |
gpt-4o-mini |
$0.00093 |
ただし、価格が安いことと、すべての自然言語からSQLへの変換で最も正確であることは同義ではありません。実際の採用判断では、代表的な質問を使って次を確認します。
- SQLの実行成功率
- JOIN条件と集計粒度の正しさ
- 日付条件、NULL処理、上位N件などの解釈
- 同じ質問を繰り返した場合の安定性
- 1件の正しい回答を得るまでの再試行を含む総コスト
通常の問い合わせはgpt-5-nanoで処理し、複雑な問い合わせだけgpt-5.4-nanoへ切り替える運用も有効です。
- Oracle: About Select AI
- OpenAI: GPT-5.4 nano
- OpenAI: GPT-5 nano
- OpenAI: GPT-4o mini
- OpenAI API Pricing
● 既存プロファイルのモデルを変更
すでにOPENAIプロファイルを作成済みの場合は、DBMS_CLOUD_AI.SET_ATTRIBUTEでモデルだけをgpt-5-nanoへ変更できます。
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'OPENAI',
attribute_name => 'model',
attribute_value => 'gpt-5-nano'
);
END;
/
PL/SQL procedure successfully completed.
● モデル設定を確認
SELECT attribute_value AS model
FROM user_cloud_ai_profile_attributes
WHERE profile_name = 'OPENAI'
AND attribute_name = 'model';
MODEL
----------------
gpt-5-nano
これでSelect AIを実行する準備が整いました。
■ SELECT AIを使用した自然言語による問い合わせ
DBMS_CLOUD_AIへ登録したSHスキーマの表を、自然言語で問い合わせます。
LLMが生成するSQLは、モデル、モデルの更新、データベースのメタデータによって変わる場合があります。本番環境では、最初にSHOWSQLでSQLを確認し、権限を必要最小限にした上で実行してください。以下はSHサンプル・スキーマを使用した実行例です。モデル変更後に公開する場合は、ご自身の環境で再実行し、結果と生成SQLを確認してください。
● AIプロファイルを現在のセッションへ設定
DBMS_CLOUD_AI.SET_PROFILEは、使用するデータベース・セッションごとに実行します。
BEGIN
DBMS_CLOUD_AI.SET_PROFILE(
profile_name => 'OPENAI'
);
END;
/
SQLclでは、次のようにも実行できます。
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
PL/SQL procedure successfully completed.
● 英語で実行
1)自然言語で問い合わせ
SELECT AI how many customers exist;
CUSTOMER_COUNT
--------------
55500
ORA-24247: Network access denied by access control list (ACL)が発生した場合は、api.openai.comへのACL設定と、実行ユーザー名を確認します。
SQL> SELECT AI how many customers exist;
Error starting at line : 1 in command -
SELECT AI how many customers exist
Error at Command Line : 1 Column : 15
Error report -
SQL Error: ORA-20000: ORA-24247: Network access denied by access control list (ACL)
ORA-06512: "C##CLOUD$SERVICE.DBMS_CLOUD", 行2064
ORA-06512: "C##CLOUD$SERVICE.DBMS_CLOUD", 行13639
ORA-06512: "C##CLOUD$SERVICE.DBMS_CLOUD_AI", 行4857
ORA-06512: "C##CLOUD$SERVICE.DBMS_CLOUD_AI", 行5401
ORA-06512: "C##CLOUD$SERVICE.DBMS_CLOUD_AI", 行8221
ORA-06512: 行1
20000. 00000 - "%s"
*Cause: The stored procedure 'raise_application_error'
was called which causes this error to be generated.
*Action: Correct the problem as described in the error message or contact
the application administrator or DBA for more information.
More Details :
https://docs.oracle.com/error-help/db/ora-20000/
https://docs.oracle.com/error-help/db/ora-06512/
2)生成されたSQLを確認
SELECT AI SHOWSQL how many customers exist;
SELECT COUNT(*) AS customer_count
FROM "SH"."CUSTOMERS"
● 日本語で実行
1)自然言語で問い合わせ
SELECT AI 顧客は全部で何人ですか?;
TOTAL_CUSTOMERS
---------------
55500
2)生成されたSQLを確認
SELECT AI SHOWSQL 顧客は全部で何人ですか?;
SELECT COUNT(*) AS "TOTAL_CUSTOMERS"
FROM "SH"."CUSTOMERS"
3)複数表を使用する問い合わせ
日常会話に近い表現で、SALES表とPRODUCTS表を使用する集計を実行します。
SQL> SELECT AI 各商品はどれだけ売れましたかしら?昇順で表示してちょ;
64MB Memory Card 710
Envoy External Keyboard 3441
Fly Fishing 4091
Comic Book Heroes 4572
18" Flat Panel Graphics Monitor 5205
256MB Memory Card 5541
Envoy 256MB - 40GB 5766
5MP Telephoto Digital Camera 6002
17" LCD w/built-in HDTV Tuner 6010
O/S Documentation Set - Italian 6113
Mini DV Camcorder with 3.5" Swivel LCD 6160
Finding Fido 6168
Martial Arts Champions 6711
Y Box 6929
8.3 Minitower Speaker 7197
Model NM500X High Yield Toner Cartridge 7557
Extension Cable 7576
Smash up Boxing 7844
O/S Documentation Set - Spanish 8340
Model C93822D Wireless Phone Battery 8990
Internal 6X CD-ROM 9523
Envoy Ambassador 9591
DVD-RAM Jewel Case, Double-Sided, 9.4G 9885
Standard Mouse 10156
128MB Memory Card 10225
Laptop carrying case 10430
O/S Documentation Set - Kanji 10742
CD-RW, High Speed, Pack of 10 10823
Home Theatre Package with DVD-Audio/Video Play 10903
S27273M Extended Use w/l Phone Batt. 11056
Multimedia speakers- 5" cones 11253
Bounce 11574
O/S Documentation Set - French 12116
Multimedia speakers- 3" cones 12163
3 1/2" Bulk diskettes, Box of 100 12292
O/S Documentation Set - German 12429
Adventures with Numbers 12742
Deluxe Mouse 12837
Envoy External 6X CD-ROM 13008
External 6X CD-ROM 13043
Internal 8X CD-ROM 13319
Model C9827B Cordless Phone Battery 14183
Music CD-R 14315
OraMusic CD-R, Pack of 10 14381
Endurance Racing 14769
CD-R Mini Discs 15084
Xtend Memory 15191
DVD-RW Discs, 4.7GB, Pack of 3 15305
3 1/2" Bulk diskettes, Box of 50 15318
Model K3822L Cordless Phone Battery 15910
SIMM- 16MB PCMCIAII card 15950
Model CD13272 Tricolor Ink Cartridge 15984
External 8X CD-ROM 16494
Model K8822S Cordless Phone Battery 16732
Unix/Windows 1-user pack 16796
CD-R, Professional Grade, Pack of 10 17152
CD-RW, High Speed Pack of 5 17389
Envoy External 8X CD-ROM 17430
DVD-R Discs, 4.7GB, Pack of 5 17938
Model SM26273 Black Ink Cartridge 19233
DVD-R Disc with Jewel Case, 4.7 GB 19403
SIMM- 8MB PCMCIAII card 19557
External 101-key keyboard 19642
Model A3827H Black Image Cartridge 20490
PCMCIA modem/fax 28800 baud 20948
CD-R with Jewel Cases, pACK OF 12 22189
PCMCIA modem/fax 19200 baud 22768
1.44MB External 3.5" Diskette 23108
O/S Documentation Set - English 27114
Keyboard Wrist Rest 27755
Mouse Pad 29282
71行が選択されました。
SQL> SELECT AI SHOWSQL 各商品はどれだけ売れましたかしら?昇順で表示してちょ;
SELECT P."PROD_NAME" AS "Product Name",
SUM(S."QUANTITY_SOLD") AS "Total Quantity Sold"
FROM "SH"."SALES" S
JOIN "SH"."PRODUCTS" P ON S."PROD_ID" = P."PROD_ID"
GROUP BY P."PROD_NAME"
ORDER BY "Total Quantity Sold" ASC
SQL> SELECT AI 最も売れた商品はどれだけ売れましたかしら?;
Product Name Total Quantity Sold
-------------------------------------------------- -------------------
Mouse Pad 29282
SQL> SELECT AI SHOWSQL 最も売れた商品はどれだけ売れましたかしら?;
RESPONSE
--------------------------------------------------------------------------------
SELECT P."PROD_NAME" AS "Product Name",
SUM(S."QUANTITY_SOLD") AS "Total Quantity Sold"
FROM "SH"."SALES" S
JOIN "SH"."PRODUCTS" P ON S."PROD_ID" = P."PROD_ID"
GROUP BY P."PROD_NAME"
ORDER BY SUM(S."QUANTITY_SOLD") DESC
FETCH FIRST ROW ONLY
● タイ語で実行
「最も売れた商品はどれだけ売れましたかしら?」に相当する内容をタイ語で問い合わせます。
SELECT AI สินค้าอะไรขายดีที่สุด และขายได้กี่ชิ้น?;
Product Name Total Quantity Sold
------------------------------------------------ -------------------
Mouse Pad 29282
● アラビア語で実行
同じ内容をアラビア語で問い合わせます。
SELECT AI ما هو المنتج الأكثر مبيعاً وكم عدد المنتجات التي تم بيعها؟;
Product Name Total Quantity Sold
------------------------------------------------ -------------------
Mouse Pad 29282
■ まとめ
OpenAI APIのgpt-5-nanoをSelect AIのモデルとして明示指定する手順と、日本語、英語、タイ語、アラビア語による問い合わせ例をまとめました。
gpt-5-nanoは入力・出力ともに低価格で、通常のSelect AIを試す最初の候補に向いています。一方、複雑なJOINや業務上重要な集計では、実際のスキーマを使った評価を行い、必要に応じてgpt-5-miniなどへ切り替えるのが安全です。
また、生成SQLは必ずSHOWSQLで確認し、APIキーとデータベース・メタデータを適切に管理することが重要です。
いいじゃない、Select AI!
■ 参考
News
製品概要
Oracleドキュメント
Oracle Blog
- Introducing Select AI - Natural Language to SQL Generation on Autonomous Database
- Configuring Generative AI in Oracle APEX using Select AI
OpenAI
- OpenAI API Platform
- Where do I find my OpenAI API Key?
- ChatGPTとAPIの課金は別管理
- GPT-5 nano
- GPT-4o mini
- OpenAI API Pricing
















