外部プロシージャをSQL関数として起動
データベース内でPL/SQLを使用して外部プロシージャを起動するステップを示します。
- 外部プロシージャの概要
外部プロシージャは、第3世代言語で記述されたファンクションで、「PL/SQL」ルーチンまたはファンクションと同様に、PL/SQLまたはSQL内からコールできます。 - Autonomous Databaseでの外部プロシージャの使用について
ユーザー定義ファンクションを使用して、Autonomous Databaseで外部プロシージャを起動して使用できます。 - Cプロシージャの定義
これらのプロトタイプのいずれかを使用してCプロシージャを定義します。 - 共有ライブラリ(.so)ファイルの作成
共有オブジェクト(.so
ファイル)ライブラリを作成します。共有オブジェクト・ライブラリには、前のステップで定義したCプロシージャ(外部プロシージャ)が含まれています。 - OCI Marketplace EXTPROCスタック・アプリケーションの取得
OCI MarketplaceEXTPROC
スタック・アプリケーションを取得するステップを示します。 - EXTPROCスタック・アプリケーションの起動
「EXTPROCアプリケーションの詳細」ページからEXTPROC
スタック・アプリケーションを起動します。 - EXTPROCエージェント・アプリケーションのスタックの作成
EXTPROC
インスタンスのスタックを作成するステップを示します。 - WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名付きウォレットは、EXTPROC
エージェント・アプリケーションの作成の一部として作成されます。このウォレットを使用すると、Extrpoc
エージェント・インスタンスにアクセスできます。 - SQLファンクションとして外部プロシージャを起動するステップ
SQLファンクションとして外部プロシージャを起動するステップを示します。
親トピック: ユーザー定義関数の起動
外部プロシージャの概要
外部プロシージャは、第3世代言語で記述されたファンクションであり、PL/SQLルーチンまたはファンクションと同様に、PL/SQLまたはSQL内からコールできます。
外部プロシージャは、再利用性、効率性およびモジュール性を促進します。他の言語で記述された既存の動的リンク・ライブラリ(DLL)は、PL/SQLプログラムからコールできます。DLLは必要な場合にのみロードされ、呼び出しプログラムに影響を与えずに拡張できます。
また、外部プロシージャを使用すると、SQLトランザクション処理に適したPL/SQLよりも、第3世代の言語によって特定のタスクがより効率的に実行されるため、パフォーマンスが向上します。
外部プロシージャは、次の場合に役立ちます。
-
科学的問題や工学的問題の解決
-
データの分析中
-
デバイスやプロセスのリアルタイム制御
詳細は、「外部プロシージャとは」を参照してください。
親トピック: 外部プロシージャを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言語の外部プロシージャのみがサポートされています。
外部プロシージャは次のものを使用してデプロイされます。
-
Oracle Cloud Infrastructure (OCI)マーケットプレイス・スタックの一部としてインストールおよび構成された
EXTPROC
エージェントを含む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 Stackアプリケーションの入手を参照してください。 -
Oracle Autonomous Database
EXTPROC
エージェントをプロビジョニングおよび構成します。詳細は、EXTPROCエージェント・アプリケーションのスタックの作成を参照してください。 -
EXTPROC
エージェント・インスタンスに接続するようにAutonomous Databaseを構成します。詳細は、EXTPROCエージェント・インスタンスへのセキュアな接続を作成するためのWalletのアップロードを参照してください。 -
DBMS_CLOUD_FUNCTION.CREATE_CATALOG
を使用してリモート・ライブラリを作成します。詳細は、「SQLファンクションとして外部プロシージャを起動するステップ」を参照してください。 -
前のステップで作成したユーザー定義関数を使用します。詳細は、「SQLファンクションとして外部プロシージャを起動するステップ」を参照してください。
親トピック: 外部プロシージャをSQL関数として起動
Cプロシージャの定義
これらのプロトタイプのいずれかを使用してCプロシージャを定義します。
-
Kernighan & Ritchieスタイル・プロトタイプ。たとえば:
void UpdateSalary(x) float x; ...
-
全角ではない数値データ型(
float
、short
、char
など)以外のISO/ANSIプロトタイプ定義は次のとおりです。たとえば: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 Stackアプリケーションの入手
OCI Marketplace EXTPROC
スタック・アプリケーションを取得するステップを示します。
親トピック: 外部プロシージャをSQL関数として起動
EXTPROCスタック・アプリケーションの起動
EXTPROCアプリケーションの詳細ページから、EXTPROC
スタック・アプリケーションを起動します。
これにより、EXTPROC
エージェントのスタックを作成できる「スタックの作成」ページが表示されます。
親トピック: 外部プロシージャをSQL関数として起動
EXTPROCエージェント・アプリケーションのスタックの作成
EXTPROC
インスタンスのスタックを作成するステップを示します。
親トピック: 外部プロシージャをSQL関数として起動
WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、EXTPROC
エージェント・アプリケーションの作成の一部として作成されます。このウォレットを使用すると、Extrpoc
エージェント・インスタンスにアクセスできます。
EXTPROC
エージェント・インスタンスでリモート・プロシージャを実行するには、Autonomous DatabaseおよびEXTPROC
エージェントがMutual Transport Layer Security (mTLS)を使用して接続します。相互Transport Layer Security (mTLS)を使用する場合、クライアントは、標準のTLS 1.2を信頼できるクライアント認証局(CA)証明書とともに使用して、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関数として起動