Pasos para llamar a la función 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 y llamen a sus respectivas funciones en la nube 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 se hará referencia en este catálogo.

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

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

    Ejemplo para crear un catálogo para 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 valor 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 el procedimiento CREATE_CATALOG para obtener más información. Puede consultar las vistas DBA_CLOUD_FUNCTION_CATALOG y USER_CLOUD_FUNCTION_CATALOG 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 un 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 el procedimiento LIST_FUNCTIONS 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 del envoltorio 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 (crea o suprime) automáticamente las funciones de envoltorio del 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 funciones que se han suprimido del 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

    Mantenga una nota del usuario actual para ejecutar este comando.

    Consulte el procedimiento SYNC_FUNCTIONS 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 respectiva cuya suscripción hace referencia el parámetro FUNCTION_ID. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función de Azure correspondiente y proporciona la salida devuelta por la función.

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

    Consulte el procedimiento CREATE_FUNCTION para obtener más información.

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

  5. Una vez creada la función, puede ejecutar 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 el procedimiento DROP_FUNCTION 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 el procedimiento DROP_CATALOG para obtener más información.