機械翻訳について

OCI Cloud関数をSQL関数として起動するステップ

データベース内のSQL関数としてOCIリモート関数を呼び出すステップを示します。

OCIのクラウド関数をSQL関数として呼び出すには、APIエンドポイントを介してそれぞれのクラウド関数を参照および呼び出すSQLラッパー関数のカタログを作成します。 このカタログを作成する前に、このカタログで参照するために必要なクラウド関数が作成されていることを前提としています。

「Oracle Cloud Infrastructure関数」およびアプリケーション(OCI関数のグループ)の作成およびデプロイメントの詳細は、「関数の作成およびデプロイ」を参照してください。

  1. プロシージャDBMS_CLOUD.CREATE_CREDENTIALを使用して資格証明を作成します。 作成する資格証明オブジェクトは、秘密キー・タイプである必要があります。
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
           credential_name => 'OCI_CRED',
           user_ocid       => 'user_ocid',
           tenancy_ocid    => 'tenancy_ocid',
           private_key     => 'private_key',
           fingerprint     => 'fingerprint'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.
    

    これにより、OCI_CRED資格証明が作成されます。

    詳細については、「CREATE_CREDENTIALプロシージャ」を参照してください。

    ノート:

    認証にリソース・プリンシパルを使用している場合は、OCI関数・アクセスに必要なポリシーを構成する必要があります。 詳細については、「関数の詳細」を参照してください。
  2. カタログを作成します。

    カタログは、APIエンドポイントを介してそれぞれのクラウド関数を参照およびコールするラッパー関数のコレクションです。

    「Oracle Cloud Infrastructure関数」のカタログを作成する例。

    BEGIN
    DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
        credential_name  => 'OCI_CRED',
        catalog_name     => 'OCI_DEMO_CATALOG',
        service_provider => 'OCI',
        cloud_params     => '{"region_id":"phx",
          "compartment_id":"compartment_id"}'
    );
    END;
    /
    
    PL/SQL procedure successfully completed.
    

    これにより、OCI_DEMO_CATALOGカタログが作成されます。

    詳細については、「CREATE_CATALOGプロシージャ」を参照してください。 「DBA_CLOUD_FUNCTION_CATALOGビュー」ビューおよび「USER_CLOUD_FUNCTION_CATALOGビュー」ビューを問い合せると、データベース内のすべてのカタログのリストを取得できます。

  3. カタログ内の関数をリストできます。

    次に、Oracle Cloud Infrastructure関数をリストする例を示します:

    VAR function_list CLOB;
    
    BEGIN
        DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS (
          credential_name  => 'OCI_CRED', 
          catalog_name     => 'OCI_DEMO_CATALOG',
          function_list    => :function_list
     );
    END;
    /
    
    PL/SQL procedure successfully completed.
    
    SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual;
    SEARCH_RESULTS                        --This is a sample output
    ------------------------------------------------------------------------------------------------
    [
      {
        "functionName"   : "create_par",
        "functionId"     : "ocid.funfc.oc1.phx.aaaa_example", 
        "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com"
      },
      {
        "functionName"   : "fintech",
        "functionId"     : "ocid.funfc.oc1.phx.bbbb_example"
    SEARCH_RESULTS
    ------------------------------------------------------------------------------------------------
    4ayosyosv4sthmya2lyza",
        "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud.com_example"
      },
      {
        "functionName"   : "jwt_codec",
        "functionId"     : "ocid.funfc.oc1.phx.jwt_code_example", 
        "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com"
      },
    SEARCH_RESULTS
    ------------------------------------------------------------------------------------------------
      {
        "functionName"   : "oci-objectstorage-create-par-python",
        "functionId"     : "ocid.funfc.oc1.phx.aaaaaaaas_example", 
        "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com"
      },
      {
        "functionName"   : "run_dbt",
        "functionId"     : "ocid.funfc.oc1.phx.aaaaaaaav_example",
    
    SEARCH_RESULTS
    ------------------------------------------------------------------------------------------------
        "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com"
      }
    ]

    詳細については、「LIST_FUNCTIONSプロシージャ」を参照してください。

  4. DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONSを実行してラッパーSQL関数を作成します。 次のいずれかのメソッドを使用して、それぞれのクラウド関数をコールするラッパーSQL関数をカタログに作成できます:
    • SYNC_FUNCTIONS: SYNC_FUNCTIONSは、カタログ内のラッパー関数を、カタログが作成されたリージョン、コンパートメントおよびテナンシで定義されたクラウド関数の完全なリストと自動的に同期(作成または削除)する、最も迅速で簡単なメソッドです。 たとえば:

    
    BEGIN
     DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
            catalog_name => 'OCI_DEMO_CATALOG'
     );
    END;
    /
    PL/SQL procedure successfully completed.
    

    これにより、カタログに新しい関数を追加し、カタログから削除された関数のラッパーを削除するためのPL/SQLラッパーが作成されます。

    次の問合せを実行して、同期を確認します。

    
    SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION';
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    CREATE_PAR
    FINTECH
    JWT_CODEC
    OCI-OBJECTSTORAGE-CREATE-PAR-PYTHON
    RUN_DBT
    

    ノート:

    このコマンドを実行するには、現在のユーザーをノートにとります。

    詳細については、「SYNC_FUNCTIONSプロシージャ」を参照してください。

    • DBMS_CLOUD.CREATE_FUNCTIONを使用して、それぞれのクラウド関数をコールするSQL関数をカタログに手動で作成できます。 たとえば:

    OCI_DEMO_CATALOGカタログに関数を作成する例。

    VAR function_args CLOB;
    EXEC :function_args := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}');
    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
            credential_name  => 'OCI_CRED',
            catalog_name     => 'OCI_DEMO_CATALOG',
            function_name    => 'fintech_fun',
            function_id      => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example',
            input_args       => :function_args
     );
    END;
    /
    
    PL/SQL procedure successfully completed.

    これにより、OCI_DEMO_CATALOGカタログにFINTECH_FUN関数が作成されます。

    カタログ内のFINTECH_FUN関数は、FUNCTION_IDパラメータによってエンドポイントが参照されるそれぞれのクラウド・関数への参照です。 カタログ内の関数を引数とともに呼び出すと、対応するクラウド関数が実行され、クラウド関数によって返される出力が提供されます。

    カタログで関数を手動で作成すると、カスタムの戻り型およびレスポンス・ハンドラを作成することもできます。 たとえば:

    CREATE OR REPLACE TYPE fintech_rt AS OBJECT (
        STATUS  VARCHAR2(1000),  
        OUTPUT  CLOB
    );
    /
    
    Type created.
    CREATE OR REPLACE FUNCTION fintech_response_handler(function_response in CLOB) 
    RETURN fintech_rt
    IS
    l_comp   fintech_rt;
    l_json_obj  JSON_OBJECT_T;
    status  VARCHAR2(1000);
    output  CLOB;
    BEGIN
          l_json_obj := JSON_OBJECT_T.parse(function_response); 
          status     := l_json_obj.get('STATUS').to_string;
          output     := l_json_obj.get('RESPONSE_BODY').to_string;
          l_comp     := fintech_rt(status,output);
          RETURN l_comp;
    END;
    /
    Function created.
    
    VAR input_param clob;
    VAR  l_return_type varchar2(100);
    VAR  l_response_handler varchar2(1000);
    
    exec :input_param       := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}');
    exec :l_return_type     := 'fintech_rt';
    exec :l_response_handler := 'fintech_response_handler';
    
    PL/SQL procedure successfully completed.
    
    PL/SQL procedure successfully completed.
    
    PL/SQL procedure successfully completed.
    
    EXEC DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (CREDENTIAL_NAME => 'OCI_CRED', FUNCTION_NAME => 'fintech_fun', CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_ID => 'ocid1.funfn.oci.phx.aaaaaa_example', INPUT_ARGS => :input_param, RETURN_TYPE => :l_return_type ,RESPONSE_HANDLER =>:l_response_handler);
    
    PL/SQL procedure successfully completed.
    

    「DBA_CLOUD_FUNCTIONビュー」ビューおよび「USER_CLOUD_FUNCTIONビュー」ビューを問い合せて、データベース内のすべての関数のリストを取得できます。

    詳細については、「CREATE_FUNCTIONプロシージャ」を参照してください。

  5. 関数の作成後、DESCRIBEを実行して呼び出すことができます。
    DESC fintech_fun
    COLUMN STATUS format a30
    COLUMN OUTPUT format a30
    DECLARE
    l_comp fintech_rt;
    BEGIN
    l_comp := fintech_fun(command=>'tokenize',value => 'PHI_INFORMATION');
    DBMS_OUTPUT.put_line ('Status of the function   =  '|| l_comp.status);
    DBMS_OUTPUT.put_line ('Response of the function =  '|| l_comp.output);
    END;
    /
    
    PL/SQL procedure successfully completed.

    これにより、OCI_DEMO_CATALOGカタログのファンクション参照oocid1.funfn.oci.phx.aaaaaa_exampleをコールして、fintech_funクラウド・ファンクションが起動されます。

  6. DROP_FUNCTIONプロシージャを使用して、既存の関数を削除できます。 たとえば:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_NAME => 'fintech_fun');
    
    PL/SQL procedure successfully completed.
    

    これにより、FINTECH_FUN関数がOCI_DEMO_CATALOGカタログから削除されます。

    詳細については、「DROP_FUNCTIONプロシージャ」を参照してください。

  7. DROP_CATALOGプロシージャを使用して、既存のカタログを削除できます。 たとえば:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'OCI_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

    これにより、データベースからOCI_DEMO_CATALOGが削除されます。

    詳細については、「DROP_CATALOGプロシージャ」を参照してください。