SQL関数としてAzure関数を起動するステップ
HTTPトリガーを使用して、データベース内のSQL関数としてAzureリモート関数を呼び出すステップを示します。
AzureファンクションをSQLファンクションとして起動するには、APIエンドポイントを介してそれぞれのクラウド・ファンクションを参照およびコールするSQLラッパー・ファンクションのカタログを作成します。 このカタログを作成する前に、このカタログで参照するために必要なAzureファンクションが作成されていることを前提としています。
- Azureファンクションにアクセスするには、Azureサービス・プリンシパルをAutonomous Databaseとともに使用する必要があります。 「Webサイト貢献者」ロールを、「アクセス・コントロール」 (IAM)の下のAzureファンクション・アプリケーションのAzureサービス・プリンシパルに付与する必要があります。
- カタログを作成します。
カタログは、APIエンドポイントを介してそれぞれのクラウド関数を参照およびコールするラッパー関数のコレクションです。
Azure関数のカタログを作成する例。
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG
( credential_name => 'AZURE$PA', catalog_name => 'AZURE_DEMO_CATALOG', service_provider => 'AZURE', cloud_params => '{"subscription_id":"XXXXXXXXXXXXXXXXXXXXXXXX_example"}' ); END; /CLOUD_PARAMS
のSUBSCRIPTION_ID
値は、Azureファンクション・アプリケーションのsubscription_idです。これにより、
AZURE_DEMO_CATALOG
カタログが作成され、指定されたSUBSCRIPTION_ID
のすべての関数がカタログ化されます。詳細については、「CREATE_CATALOGプロシージャ」を参照してください。 「DBA_CLOUD_FUNCTION_CATALOGビュー」ビューおよび「USER_CLOUD_FUNCTION_CATALOGビュー」ビューを問い合せると、データベース内のすべてのカタログのリストを取得できます。
- カタログ内の関数をリストできます。
次に、Azureファンクションをリストする例を示します:
VAR function_list CLOB; BEGIN
DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS
( credential_name => 'AZURE$PA', catalog_name => 'AZURE_DEMO_CATALOG', function_list => :function_list ); END; / SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual;詳細については、「LIST_FUNCTIONSプロシージャ」を参照してください。
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
を実行してラッパーSQL関数を作成します。 次のいずれかのメソッドを使用して、それぞれのクラウド関数をコールするラッパーSQL関数をカタログに作成できます:-
SYNC_FUNCTIONS:
SYNC_FUNCTIONS
は、カタログ内のラッパー関数をAzure関数の完全なリストと自動的に同期(作成または削除)する、最も迅速で簡単なメソッドです。 たとえば:
BEGIN
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
( catalog_name => 'AZURE_DEMO_CATALOG' ); END; /これにより、カタログに新しい関数を追加し、カタログから削除された関数のラッパーを削除するためのPL/SQLラッパーが作成されます。
ノート:
Azureファンクション・アプリケーションでAzureファンクションを追加、削除または無効化する場合は、SYNC_FUNCTIONS
を実行して、カタログ内の対応するPL/SQLラッパーを更新する必要があります。次の問合せを実行して、同期を確認します。
SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION';
ノート:
このコマンドを実行するには、現在のユーザーをノートにとります。詳細については、「SYNC_FUNCTIONSプロシージャ」を参照してください。
AZURE_DEMO_CATALOG
を使用して、それぞれのAzureファンクションをコールするSQL
ファンクションをカタログに手動で作成できます。
AZURE_DEMO_CATALOG
カタログにファンクションを作成する例。BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION
( credential_name => 'AZURE$PA', catalog_name => 'AZURE_DEMO_CATALOG', function_name => 'azure_testfunc', function_id => 'function_id_path', input_args => :function_args ); END; /ノート:
関数名の最大長は100文字に制限されています。これにより、
AZURE_DEMO_CATALOG
カタログにAZURE_TESTFUNC
ファンクションが作成されます。カタログ内の
AZURE_TESTFUNC
ファンクションは、FUNCTION_ID
パラメータによってサブスクリプションが参照されるそれぞれのAzureファンクションへの参照です。 カタログ内のファンクションを引数とともに呼び出すと、対応するAzureファンクションが実行され、ファンクションによって返される出力が提供されます。「DBA_CLOUD_FUNCTIONビュー」ビューおよび「USER_CLOUD_FUNCTIONビュー」ビューを問い合せて、データベース内のすべての関数のリストを取得できます。
詳細については、「CREATE_FUNCTIONプロシージャ」を参照してください。
詳細については、「AzureファンクションHTTPトリガー」を参照してください。
-
- 関数の作成後、
DESCRIBE
を実行して呼び出すことができます。DESC AZURE_TESTFUNC
SELECT AZURE_TESTFUNC(NULL) FROM dual;
これにより、
AZURE_DEMO_CATALOG
カタログのファンクション参照/subscriptions/44496e556-8ssp-4262-b389-0f15f685c879/resources/ADBStest/providers/Microsoft.Web/sites/AZUREADBS/functions/HttpTrigger_example
をコールして、AZURE_TESTFUNC
ファンクションが起動されます。 DROP_FUNCTION
プロシージャを使用して、既存の関数を削除できます。 たとえば:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AZURE_DEMO_CATALOG', FUNCTION_NAME => 'AZURE_TESTFUNC');
これにより、
AZURE_DEMO_CATALOG
カタログからAZURE_TESTFUNC
関数が削除されます。詳細については、「DROP_FUNCTIONプロシージャ」を参照してください。
DROP_CATALOG
プロシージャを使用して、既存のカタログを削除できます。 たとえば:BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG
( catalog_name => 'AZURE_DEMO_CATALOG' ); END; /これにより、データベースから
AZURE_DEMO_CATALOG
が削除されます。詳細については、「DROP_CATALOGプロシージャ」を参照してください。
親トピック: ユーザー定義関数の起動