Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PLSQLをAIオーケストレータに昇華
Search
Takayuki Nishio
July 23, 2026
Technology
57
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PLSQLをAIオーケストレータに昇華
JPOUG#16で発表した内容になります。
PLSQLでAIを利用するサンプルです。
Takayuki Nishio
July 23, 2026
More Decks by Takayuki Nishio
See All by Takayuki Nishio
ユースケース:お客様アンケート分析システム
nisshii
0
6
SELECE ポジティブ社員 FROM OracleAIDatabase26ai
nisshii
0
33
障害は突然やってくる。OracleDatabaseリカバリコンテスト
nisshii
0
82
SelectAIはSQL講師になれるのか?
nisshii
0
36
スタートダッシュ!オラクルマスター23ai
nisshii
0
130
オンプレからADBへのデータ移行。正月休みを獲得した方法 [Oracle]
nisshii
0
380
Oracle CloudWorld 2024現地レポート
nisshii
0
190
SelectAIでSQL研修の演習問題に挑む [Oracle]
nisshii
1
500
Other Decks in Technology
See All in Technology
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
200
サイバー捜査員研修(前半)
nomizone
1
1.9k
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
480
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
150
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
230
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
550
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
140
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
480
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
How STYLIGHT went responsive
nonsquared
100
6.2k
A designer walks into a library…
pauljervisheath
211
24k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
310
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
370
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
RailsConf 2023
tenderlove
30
1.5k
エンジニアに許された特別な時間の終わり
watany
108
250k
Transcript
しゃちほこオラクル倶楽部 第7回 Oracle Cloud 失注への軌跡 ~ 努力は無駄にならない ~ PL/SQL +
AI ~データ処理言語から、AIオーケストレータ―へ昇華~ 2026年7月23日 【JPOUG Tech Talk Night #16】 西尾 孝之 - Takayuki Nishio -
オーガナイザー紹介 | 西尾 孝之 / Takayuki Nishio Oracleと山を愛するエンジニア(23年目) 資格 ・ORACLE
MASTER : Platinum DBA 2019, 12c , 11c , 10g , 9i , 8i ・AWS : Database Speciality , Data Analytics , Machine-Learning 2025 OCI Top Engineers 表彰 認定証 ・マッターホルン登頂…4478m OCI 全資格取得 (2025 IaaS/PaaS) ・モンブラン登頂………4810m ・キリマンジャロ登頂…..5895m
アジェンダ PL/SQLでAIを扱うメリット PL/SQLからAIサービスを呼び出すサンプルコード紹介
PL/SQLでAIを扱うメリット データのある場所でAIを動かす
お客様アンケート分析システム
サンプルアプリケーション(お客様アンケート分析システム) LINEで撮った写真を AI-OCRでテキスト化 センチメント分析で テキストの感情を数値化 AI-OCRで 高精度取り込み テキストはベクトル化して RAG検索 RAG検索
要約 センチメント分析 で感情を数値化
システム構成イメージ ADBのみでLINEを使ったアプリケーションが作成可能。 REST使用のため、APサーバ不要。 本日はPL/SQLとGenAIの部分に着目。 Oracle Cloud Oracle Autonomous AI Database
26ai REST API エンドポイント LINE用 PL/SQL <メイン機能> ・メッセージ受信 ・メッセージ送信 <AI関連機能> ・OCR ・翻訳 ・センチメント分析 ・グラフ表示 他 本日の範囲 OCI Generative AI
PL/SQLからAIサービスを呼び出すサンプルコード紹介 生成AIサービスの利用
今日のゴール 画像データを OCIのDocument Understandingを使ってテキスト化する。 (音声・翻訳等、他のOCI生成AIサービスも同じような方法で呼び出し可能)
PL/SQLから生成AIを呼び出すための流れ ① Autonomous AI Databaseを作成 ② DBユーザ作成と設定 ③ 作成したDBユーザ用のクレデンシャルを作成 ④
テストテーブルの作成と、画像データのロード ⑤ PL/SQLによるOCR処理の実行 Qiitaで全文公開中
① Autonomous AI Databaseを作成 OCI Consoleから ADB 26ai を作成。数分で出来上がります。 Qiita
② DBユーザ作成と設定 データの格納とPL/SQLを呼び出すDBユーザを作成します。 ADBを作成すると、ブラウザで使用できるSQL環境も使用できます。 Qiita
③ DB作成したDBユーザ用のクレデンシャルを作成 Qiita DBから直接生成AIサービスを呼び出すために、クレデンシャルを作成します。 OCIコンソールでAPIキー追加と必要な情報を収集し、SQLで作成。
④ テストテーブルの作成と、画像データロード Qiita テストデータをロードします。これもブラウザから可能です。 PL/SQLからロードしたり、ObjectStorageにあるファイルのロードも可能です。 photo列の写真をOCRして、text列に 文字データを保存する処理を作成
⑤ OCR処理の実行 Qiita PL/SQLコード(OCR機能部分)抜粋 どのAIサービスを呼び出すか AIサービスの呼び出しは、基本的には同じ構造。 -- 1. AIサービスのURIを設定 l_uri
:= 'https://document.aiservice.us-chicago-1'oci.oraclecloud.com/20221109/actions/analyzeDocument'; -- 2. JSONボディの組み立て(CLOB) 呼び出しに使うJSONの組み立て l_body_clob := '{"features": [{"featureType": "TEXT_EXTRACTION"}], "processorType":“GENERAL","isZipOutputEnabled":false,"language":"JPN", "document": {"source": "INLINE", "data": "' || APEX_WEB_SERVICE.BLOB2CLOBBASE64(l_blob) || ‘” , "autoRotate": true}}'; -- 3. CLOB を BLOB に変換(AIサービスへはBLOBで送信する必要がある) DBMS_LOB.CREATETEMPORARY(l_body_blob, FALSE); DBMS_LOB.CONVERTTOBLOB( dest_lob => l_body_blob, src_clob => l_body_clob, amount => DBMS_LOB.LOBMAXSIZE, dest_offset => l_dest_offset, src_offset => l_src_offset, blob_csid => DBMS_LOB.DEFAULT_CSID, lang_context=> l_lang_ctx, warning => l_warning ); -- 4. AIサービスへリクエスト送信 l_response := DBMS_CLOUD.SEND_REQUEST( credential_name => l_credential, method => ‘POST‘, AIサービスのURI と JSON uri body => l_uri, => l_body_blob );
⑤ OCR処理の実行 Qiita PL/SQLコード(OCR機能部分)抜粋 JSONでパラメータ指定できる! が、マニュアルが少ない/みつけにくい -- 1. AIサービスのURIを設定 l_uri
:= 'https://document.aiservice.us-chicago-1'oci.oraclecloud.com/20221109/actions/analyzeDocument'; -- 2. JSONボディの組み立て(CLOB) 日本語を指定 l_body_clob := '{"features": [{"featureType": "TEXT_EXTRACTION"}], "processorType":“GENERAL","isZipOutputEnabled":false,"language":"JPN", "document": {"source": "INLINE", "data": "' || APEX_WEB_SERVICE.BLOB2CLOBBASE64(l_blob) || ‘” , "autoRotate": true}}'; 画像の自動回転 -- 3. CLOB を BLOB に変換(AIサービスへはBLOBで送信する必要がある) DBMS_LOB.CREATETEMPORARY(l_body_blob, FALSE); DBMS_LOB.CONVERTTOBLOB( dest_lob => l_body_blob, src_clob => l_body_clob, amount => DBMS_LOB.LOBMAXSIZE, dest_offset => l_dest_offset, src_offset => l_src_offset, blob_csid => DBMS_LOB.DEFAULT_CSID, lang_context=> l_lang_ctx, warning => l_warning ); -- 4. AIサービスへリクエスト送信 l_response := DBMS_CLOUD.SEND_REQUEST( credential_name => l_credential, method => ‘POST‘, uri body => l_uri, => l_body_blob );
流れのまとめ ① Autonomous AI Databaseを作成 ② DBユーザ作成と設定 ③ 作成したDBユーザ用のクレデンシャルを作成 ④
テストテーブルの作成と、画像データのロード ⑤ PL/SQLによるOCR処理の実行 Qiitaで全文公開中
サンプルコード:ベクトル化 Oracleの特徴!ベクトル化も検索も標準機能。1DBで実現。 業務データと同じテーブルにVECTOR列を作成可能。 データのベクトル化も何でもできるDBMS_VECTOR_CHAINパッケージが最強! dbms_vector_chain.utl_to_embeddings( dbms_vector_chain.utl_to_chunks(dbms_vector_chain.utl_to_text(’ベクトル化’したいデータ’), json('{"max": "400", "overlap": "20",
"language": "JAPANESE", "normalize": "all"}')), json('{"provider": "ocigenai", "credential_name": "VECTOR_CRED", "url": "https://inference.generativeai.ap-osaka1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}') )
セマンティック検索のチューニング 30万件いれると検索で25秒かかるようになった。専用の索引で0.x秒に。 セマンティック検索では、SELECT文のキーワードと索引のキーワードは一致させる。 -- SELECT文 SELECT embed_data FROM t3_chunk_table ORDER
BY vector_distance(embed_vector , acnishi.embeddings(p_question), COSINE) fetch first 3 rows only; 一致させる -- 索引の作成(CREATE INDEX) CREATE VECTOR INDEX idx_vec ON t3_chunk_table (embed_vector) ORGANIZATION INMEMORY NEIGHBOR GRAPH DISTANCE COSINE;
Thank you ありがとうございました