Pasos para llamar a funciones de Azure como funciones SQL

Muestra los pasos para llamar a funciones remotas de Azure como funciones SQL en la base de datos mediante el disparador HTTP.

Para llamar a Azure Function como funciones SQL, cree un catálogo de funciones de envoltorio SQL que hagan referencia a sus respectivas funciones en la nube y las llamen a través de sus puntos finales de API. Antes de crear este catálogo, se asume aquí que ha creado las funciones de Azure necesarias a las que debe hacer referencia este catálogo.

  1. Para acceder a las funciones de Azure, debe utilizar el principal de servicio de Azure con Autonomous Database. Debe otorgar el rol de contribuyente de sitio web al principal de servicio de Azure para la aplicación de función de Azure en su control de acceso (IAM).
  2. Crear un catálogo.

    Un catálogo es una recopilación de funciones de envoltorio que hacen referencia a sus respectivas funciones en la nube y las llaman a través de sus puntos finales de API.

    Ejemplo para crear un catálogo para las funciones de 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;
    /
    

    El valor SUBSCRIPTION_ID de CLOUD_PARAMS es el subscription_id de la aplicación de función de Azure.

    Esto crea el catálogo AZURE_DEMO_CATALOG y cataloga todas las funciones del SUBSCRIPTION_ID proporcionado.

    Consulte CREATE_CATALOG Procedure para obtener más información. Puede consultar las vistas DBA_CLOUD_FUNCTION_CATALOG View y USER_CLOUD_FUNCTION_CATALOG View para recuperar la lista de todos los catálogos de la base de datos.

  3. Puede mostrar las funciones de un catálogo.

    A continuación, se muestra el ejemplo para mostrar las funciones de 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;
    

    Consulte LIST_FUNCTIONS Procedure para obtener más información.

  4. Ejecute DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS para crear funciones SQL de envoltorio. Puede utilizar uno de los siguientes métodos para crear las funciones SQL de encapsulador en el catálogo, que llaman a sus respectivas funciones en la nube:
    • SYNC_FUNCTIONS: SYNC_FUNCTIONS es el método más rápido y sencillo, que sincroniza automáticamente (crea o suprime) funciones de envoltorio en el catálogo con la lista completa de funciones de Azure. Por ejemplo:

    
    BEGIN
     DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
            catalog_name => 'AZURE_DEMO_CATALOG'
     );
    END;
    /
    

    Esto crea un envoltorio PL/SQL para agregar nuevas funciones al catálogo y eliminar envoltorios para las funciones que se han suprimido del catálogo.

    Nota

    Cuando se agrega, suprime o desactiva una función de Azure en la aplicación de función de Azure, debe ejecutar SYNC_FUNCTIONS para actualizar los envoltorios PL/SQL correspondientes en el catálogo.

    Ejecute la siguiente consulta para verificar la sincronización.

    
    SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION';
    
    Nota

    Tenga en cuenta el usuario actual para ejecutar este comando.

    Consulte SYNC_FUNCTIONS Procedure para obtener más información.

    • Puede crear manualmente una función SQL en el catálogo que llame a su función de Azure respectiva mediante AZURE_DEMO_CATALOG.

    Ejemplo para crear una función en el catálogo 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;
    /
    
    Nota

    La longitud máxima del nombre de función está limitada a 100 caracteres.

    Esto crea la función AZURE_TESTFUNC en el catálogo AZURE_DEMO_CATALOG.

    La función AZURE_TESTFUNC del catálogo es una referencia a la función de Azure correspondiente a la que hace referencia el parámetro FUNCTION_ID a la suscripción. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función Azure correspondiente y proporciona la salida devuelta por la función.

    Puede consultar las vistas DBA_CLOUD_FUNCTION View y USER_CLOUD_FUNCTION View para recuperar la lista de todas las funciones de la base de datos.

    Consulte CREATE_FUNCTION Procedure para obtener más información.

    Consulte Disparador HTTP de Azure Functions para obtener más información.

  5. Después de crear la función, puede DESCRIBE y llamarla.
    DESC AZURE_TESTFUNC
    SELECT AZURE_TESTFUNC(NULL) FROM dual;

    Esto llama a la función AZURE_TESTFUNC llamando a la referencia de función /subscriptions/44496e556-8ssp-4262-b389-0f15f685c879/resources/ADBStest/providers/Microsoft.Web/sites/AZUREADBS/functions/HttpTrigger_example en el catálogo AZURE_DEMO_CATALOG.

  6. Puede borrar una función existente mediante el procedimiento DROP_FUNCTION. Por ejemplo:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AZURE_DEMO_CATALOG', FUNCTION_NAME => 'AZURE_TESTFUNC');
    
    

    Esto borra la función AZURE_TESTFUNC del catálogo AZURE_DEMO_CATALOG.

    Consulte DROP_FUNCTION Procedure para obtener más información.

  7. Puede borrar un catálogo existente mediante el procedimiento DROP_CATALOG. Por ejemplo:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AZURE_DEMO_CATALOG'
      );
    END;
    /
    

    Esto borra AZURE_DEMO_CATALOG de la base de datos.

    Consulte DROP_CATALOG Procedure para obtener más información.