Schritte zum Aufrufen von OCI Cloud Functions als SQL-Funktionen

Zeigt die Schritte zum Aufrufen von OCI-Remotefunktionen als SQL-Funktionen in der Datenbank an.

Um Cloud-Funktionen in OCI als SQL-Funktionen aufzurufen, erstellen wir einen Katalog mit SQL-Wrapper-Funktionen, die ihre jeweilige Cloud-Funktion über ihre API-Endpunkte referenzieren und aufrufen. Bevor Sie diesen Katalog erstellen, wird hier davon ausgegangen, dass Sie die erforderlichen Cloud-Funktionen erstellt haben, die von diesem Katalog referenziert werden sollen.

Weitere Informationen zum Erstellen und Bereitstellen von Oracle Cloud Infrastructure Functions und Anwendungen (d.h. einer Gruppe von OCI Functions) finden Sie unter Funktionen erstellen und bereitstellen.

  1. Erstellen Sie Zugangsdaten mit der Prozedur DBMS_CLOUD.CREATE_CREDENTIAL. Das Zugangsdatenobjekt, das Sie erstellen, muss den Typ "Private Key" aufweisen.
    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.
    

    Dadurch werden die Zugangsdaten OCI_CRED erstellt.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

    Hinweis

    Wenn Sie einen Resource Principal für die Authentifizierung verwenden, müssen die erforderlichen Policys für den OCI-Funktionszugriff konfiguriert werden. Weitere Informationen finden Sie unter Details zu Functions.
  2. Erstellen Sie einen Katalog.

    Ein Katalog ist eine Sammlung von Wrapper-Funktionen, die ihre jeweiligen Cloud-Funktionen über ihre API-Endpunkte referenzieren und aufrufen.

    Beispiel zum Erstellen eines Katalogs für Oracle Cloud Infrastructure Functions.

    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.
    

    Dadurch wird der Katalog OCI_DEMO_CATALOG erstellt.

    Weitere Informationen finden Sie unter Prozedur CREATE_CATALOG. Sie können die Views DBA_CLOUD_FUNCTION_CATALOG View und USER_CLOUD_FUNCTION_CATALOG View abfragen, um die Liste aller Kataloge in der Datenbank abzurufen.

  3. Sie können die Funktionen in einem Katalog auflisten.

    Im Folgenden finden Sie das Beispiel zum Auflisten von Oracle Cloud Infrastructure Functions:

    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"
      }
    ]

    Weitere Informationen finden Sie unter Prozedur LIST_FUNCTIONS.

  4. Führen Sie DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS aus, um Wrapper-SQL-Funktionen zu erstellen. Mit einer der folgenden Methoden können Sie die Wrapper-SQL-Funktionen im Katalog erstellen, die ihre jeweiligen Cloud-Funktionen aufrufen:
    • SYNC_FUNCTIONS: SYNC_FUNCTIONS ist die schnellste und einfachste Methode, die Wrapper-Funktionen im Katalog automatisch mit der vollständigen Liste der Cloud-Funktionen synchronisiert (erstellt oder löscht), die in der Region, dem Compartment und dem Mandanten definiert sind, mit denen der Katalog erstellt wurde. Beispiele:

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

    Dadurch wird ein PL/SQL-Wrapper erstellt, mit dem dem Katalog neue Funktionen hinzugefügt und Wrapper für Funktionen entfernt werden können, die aus dem Katalog gelöscht wurden.

    Führen Sie die folgende Abfrage aus, um die Synchronisierung zu prüfen.

    
    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
    
    Hinweis

    Notieren Sie sich den aktuellen Benutzer, um diesen Befehl auszuführen.

    Weitere Informationen finden Sie unter Prozedur SYNC_FUNCTIONS.

    • Sie können manuell eine SQL-Funktion in Ihrem Katalog erstellen, die ihre jeweilige Cloud-Funktion mit DBMS_CLOUD.CREATE_FUNCTION aufruft. Beispiele:

    Beispiel zum Erstellen einer Funktion im Katalog 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.

    Dadurch wird die Funktion FINTECH_FUN im Katalog OCI_DEMO_CATALOG erstellt.

    Die Funktion FINTECH_FUN im Katalog ist eine Referenz auf die jeweilige Cloud-Funktion, deren Endpunkt vom Parameter FUNCTION_ID referenziert wird. Wenn Sie die Funktion im Katalog zusammen mit ihren Argumenten aufrufen, wird die entsprechende Cloud-Funktion ausgeführt und die von der Cloud-Funktion zurückgegebene Ausgabe bereitgestellt.

    Wenn Sie eine Funktion manuell im Katalog erstellen, können Sie auch benutzerdefinierte Rückgabetypen und Response Handler erstellen. Beispiele:

    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.
    

    Sie können die Views DBA_CLOUD_FUNCTION View und USER_CLOUD_FUNCTION View abfragen, um die Liste aller Funktionen in der Datenbank abzurufen.

    Weitere Informationen finden Sie unter Prozedur CREATE_FUNCTION.

  5. Nachdem die Funktion erstellt wurde, können Sie DESCRIBE aufrufen.
    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.

    Dadurch wird die Cloud-Funktion fintech_fun aufgerufen, indem die Funktionsreferenz oocid1.funfn.oci.phx.aaaaaa_example im Katalog OCI_DEMO_CATALOG aufgerufen wird.

  6. Sie können eine vorhandene Funktion mit der Prozedur DROP_FUNCTION löschen. Beispiele:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_NAME => 'fintech_fun');
    
    PL/SQL procedure successfully completed.
    

    Dadurch wird die Funktion FINTECH_FUN aus dem Katalog OCI_DEMO_CATALOG gelöscht.

    Weitere Informationen finden Sie unter Prozedur DROP_FUNCTION.

  7. Sie können einen vorhandenen Katalog mit der Prozedur DROP_CATALOG löschen. Beispiele:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'OCI_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

    Dadurch wird der OCI_DEMO_CATALOG aus der Datenbank gelöscht.

    Weitere Informationen finden Sie unter Prozedur DROP_CATALOG.