SQLファンクションとしての外部プロシージャの起動
データベース内のPL/SQLを使用して外部プロシージャを起動するステップを示します。
- 外部プロシージャの概要
外部プロシージャは、第3世代言語で記述されたファンクションで、PL/SQLルーチンまたはファンクションと同様に、PL/SQLまたはSQL内からコールできます。 - Autonomous Databaseでの外部プロシージャの使用について
ユーザー定義ファンクションを使用して、Autonomous Databaseで外部プロシージャを起動および使用できます。 - Cプロシージャの定義
これらのプロトタイプの1つを使用して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は必要な場合にのみロードされ、コール・プログラムに影響を与えずに拡張できます。
また、外部プロシージャを使用するとパフォーマンスが向上します。これは、第3世代言語では、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言語の外部プロシージャのみがサポートされます。
外部プロシージャは、次のものを使用してデプロイされます。
-
Oracle Cloud Infrastructure (OCI) Marketplaceスタックの一部としてインストールおよび構成された
EXTPROC
エージェントを含むOracle提供のコンテナ・イメージ。EXTPROC
エージェント・インスタンスは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているVMでリモートでホストされます。Autonomous DatabaseとEXTPROC
エージェント・インスタンス間のセキュアな通信は、ネットワーク・セキュリティ・グループ(NSG)ルールを設定して、プライベート・エンドポイントで実行されているAutonomous DatabaseインスタンスからEXTPROC
エージェント・インスタンスへのトラフィックが許可されるようにすることで保証されます。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を構成します。詳細は、「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スタック・アプリケーションの取得
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)を使用する場合、クライアントは、標準のTLS 1.2を信頼できるクライアント認証局(CA)証明書とともに使用して、TCPS (セキュアTCP)データベース接続を介して接続します。詳細は、相互TLS (mTLS)認証についてを参照してください。
認証局(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関数としての外部プロシージャの起動