SQLファンクションとしての外部プロシージャの起動
データベース内でPL/SQLを使用して外部プロシージャを起動するステップを示します。
- 外部プロシージャの概要
外部プロシージャは、第3世代の言語で記述されたファンクションで、PL/SQLまたはSQL内からPL/SQLルーチンまたはファンクションであるかのようにコールできます。 - Autonomous Databaseでの外部プロシージャの使用について
ユーザー定義関数を使用して、Autonomous Databaseの外部プロシージャを起動して使用できます。 - Cプロシージャの定義
これらのプロトタイプのいずれかを使用して、Cプロシージャを定義します。 - 共有ライブラリ(.so)ファイルの作成
共有オブジェクト(.so
ファイル)ライブラリを作成します。 共有オブジェクト・ライブラリには、前のステップで定義したCプロシージャ(外部プロシージャ)が含まれています。 - OCI Marketplace EXTPROCスタック・アプリケーションの入手
OCI MarketplaceのEXTPROC
スタック・アプリケーションを取得するステップを示します。 - EXTPROCスタック・アプリケーションの起動
「EXTPROCアプリケーション詳細」ページからEXTPROC
スタック・アプリケーションを起動します。 - EXTPROCエージェント・アプリケーションのスタックの作成
EXTPROC
インスタンスのスタックを作成するステップを示します。 - WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、EXTPROC
エージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Extrpoc
エージェント・インスタンスにアクセスできます。 - 外部プロシージャをSQLファンクションとして起動するステップ
外部プロシージャをSQLファンクションとして起動するステップを示します。
親トピック: ユーザー定義関数の起動
外部プロシージャの概要
外部プロシージャは、第3世代の言語で記述されたファンクションで、PL/SQLまたはSQL内からPL/SQLルーチンまたはファンクションであるかのようにコールできます。
外部プロシージャは、再利用性、効率性およびモジュール性を促進します。 他の言語で記述された既存の動的リンク・ライブラリ(DLL)は、PL/SQLプログラムからコールできます。 DLLは必要な場合にのみロードされ、コール元プログラムに影響を与えずに拡張できます。
また、外部プロシージャを使用すると、SQLトランザクション処理に適したPL/SQLよりも特定のタスクをより効率的に実行できるため、パフォーマンスも向上します。
外部プロシージャは、次の場合に役立ちます:
-
科学的問題や工学的問題の解決
-
データの分析
-
デバイスやプロセスのリアルタイム制御
詳細については、「外部プロシージャとは」を参照してください。
親トピック: SQLファンクションとしての外部プロシージャの起動
Autonomous Databaseでの外部プロシージャの使用について
ユーザー定義関数を使用して、Autonomous Databaseの外部プロシージャを起動して使用できます。
外部プロシージャは、Autonomous Databaseインスタンスにはインストールしません。 外部プロシージャを使用するには、プロシージャはOracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているVMでリモートでホストされます。
外部プロシージャは、Autonomous Databaseがプライベート・エンドポイントにある場合にのみサポートされます。 EXTPROC
エージェント・インスタンスはプライベート・サブネットでホストされ、Autonomous Databaseはリバース接続エンドポイント(RCE)を介してEXTPROC
エージェントにアクセスします。
ノート:
Autonomous Databaseは、C言語の外部プロシージャのみをサポートします。外部プロシージャは、次を使用してデプロイされます:
-
EXTPROC
エージェントがインストールされ、Oracle Cloud Infrastructure (OCI)マーケットプレイス・スタックの一部として構成されたOracle提供のコンテナ・イメージ。EXTPROC
エージェント・インスタンスは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているVMにリモートでホストされます。 Autonomous DatabaseとEXTPROC
エージェント・インスタンス間のセキュアな通信は、プライベート・エンドポイントで実行されているAutonomous DatabaseインスタンスからEXTPROC
エージェント・インスタンスにトラフィックが許可されるように、ネットワーク・セキュリティ・グループ(NSG)ルールを設定することで保証されます。EXTPROC
エージェント・イメージは、ポート16000で外部プロシージャをホストおよび実行するように事前構成されています。 -
ライブラリを作成し、外部ファンクションおよびプロシージャを登録および起動するためのPL/SQLプロシージャ。
詳細については、「DBMS_CLOUD_FUNCTIONパッケージ」を参照してください。
次のステップに従って、Autonomous Databaseで外部プロシージャを起動します:
-
Cプロシージャを定義します。 「Cプロシージャの定義」を参照してください。
-
共有オブジェクト(
.so
ファイル)ライブラリを作成します。 「共有ライブラリ(.so)ファイルの作成」を参照してください。 -
Autonomous Database
EXTPROC
スタック・アプリケーションを起動します。 「OCI Marketplace EXTPROCスタック・アプリケーションの入手」を参照してください。 -
Oracle Autonomous Database
EXTPROC
エージェントをプロビジョニングおよび構成します。 詳細については、「EXTPROCエージェント・アプリケーションのスタックの作成」を参照してください。 -
EXTPROC
エージェント・インスタンスに接続するようにAutonomous Databaseを構成します。 詳細については、「WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成」を参照してください。 -
DBMS_CLOUD_FUNCTION.CREATE_CATALOG
を使用してリモート・ライブラリを作成します。 詳細については、「外部プロシージャをSQLファンクションとして起動するステップ」を参照してください。 -
前のステップで作成したユーザー定義関数を使用します。 詳細については、「外部プロシージャをSQLファンクションとして起動するステップ」を参照してください。
親トピック: SQLファンクションとしての外部プロシージャの起動
Cプロシージャの定義
これらのプロトタイプのいずれかを使用して、Cプロシージャを定義します。
-
Kernighan & Ritchieスタイルのプロトタイプ。 たとえば:
void UpdateSalary(x) float x; ...
-
全幅より小さい数値データ型以外のISO/ANSIプロトタイプ(
float
,short
,char
など)。 たとえば:void UpdateSalary(double x) ...
-
デフォルトの引数格上げによってサイズの変わらないその他のデータ型。
デフォルトの引数格上げによってサイズが変わる定義の例は次のとおりです。
void UpdateSalary(float x) ...
親トピック: SQLファンクションとしての外部プロシージャの起動
共有ライブラリ(.so)ファイルの作成
共有オブジェクト(.so
ファイル)ライブラリを作成します。 共有オブジェクト・ライブラリには、前のステップで定義したCプロシージャ(外部プロシージャ)が含まれています。
次のコマンドを使用して、共有オブジェクト・ライブラリを生成します:
gcc -I/u01/app/oracle/extproc_libs/ -shared -fPIC -o extproc.so UpdateSalary.c
これにより、共有オブジェクト(.so
)、extproc.so
ライブラリが作成されます。 前のステップで定義したUpdateSalary
プロシージャは、extproc.so
ライブラリに含まれています。 共有オブジェクト(.so
)ライブラリは、実行時に動的にロードされます。
親トピック: SQLファンクションとしての外部プロシージャの起動
OCI Marketplace EXTPROCスタック・アプリケーションの入手
OCI MarketplaceのEXTPROC
スタック・アプリケーションを取得するステップを示します。
親トピック: SQLファンクションとしての外部プロシージャの起動
EXTPROCスタック・アプリケーションの起動
「EXTPROCアプリケーション詳細」ページからEXTPROC
スタック・アプリケーションを起動します。
これにより、EXTPROC
エージェントのスタックを作成できる「スタックの作成」ページが表示されます。
親トピック: SQLファンクションとしての外部プロシージャの起動
EXTPROCエージェント・アプリケーションのスタックの作成
EXTPROC
インスタンスのスタックを作成するステップを示します。
親トピック: SQLファンクションとしての外部プロシージャの起動
WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、EXTPROC
エージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Extrpoc
エージェント・インスタンスにアクセスできます。
EXTPROC
エージェント・インスタンスでリモート・プロシージャを実行するには、Autonomous DatabaseおよびEXTPROC
エージェントが相互トランスポート・レイヤー・セキュリティ(mTLS)を使用して接続します。 Mutual Transport Layer Security (mTLS)を使用する場合、クライアントは、信頼できるクライアント認証局(CA)証明書を持つ標準のTLS 1.2を使用して、TCPS (セキュアTCP)データベース接続を介して接続します。 詳細については、「Autonomous Databaseインスタンスへの接続について」を参照してください。
ノート:
認証局(CA)によって発行された公開証明書を取得して使用することもできます。前提条件として、EXTPROC
が実行されているVMの /u01/app/oracle/extproc_wallet
ディレクトリから、ウォレットをオブジェクト・ストレージにエクスポートする必要があります。
次のステップに従って、ウォレットをAutonomous Databaseにアップロードします:
親トピック: SQLファンクションとしての外部プロシージャの起動
外部プロシージャをSQLファンクションとして起動するステップ
外部プロシージャをSQLファンクションとして起動するステップを示します。
OCI MarketplaceのEXTPROC
スタック・アプリケーションを起動し、外部プロシージャを実行するように構成した後、それぞれの外部プロシージャを参照およびコールするSQLラッパー・ファンクションのライブラリを作成します。
前提条件として、ホワイトリスト・ライブラリをEXTPROC
VMの/u01/app/oracle/extproc_libs
ディレクトリにコピーする必要があります。
親トピック: SQLファンクションとしての外部プロシージャの起動