Etapes d'appel de fonctions Azure en tant que fonctions SQL

Présente les étapes permettant d'appeler des fonctions distantes Azure en tant que fonctions SQL dans votre base de données à l'aide du déclencheur HTTP.

Pour appeler une fonction Azure en tant que fonctions SQL, créez un catalogue de fonctions de wrapper SQL qui référencent et appellent leur fonction cloud respective via leurs adresses d'API. Avant de créer ce catalogue, il est supposé que vous avez créé les fonctions Azure nécessaires à référencer par ce catalogue.

  1. Pour accéder aux fonctions Azure, vous devez utiliser le principal de service Azure avec Autonomous Database. Vous devez accorder le rôle Contributeur de site Web au principal de service Azure pour l'application de fonction Azure sous son contrôle d'accès (IAM).
  2. Créez un catalogue.

    Un catalogue est un ensemble de fonctions de wrapper qui référencent et appellent leurs fonctions cloud respectives via leurs adresses d'API.

    Exemple de création d'un catalogue pour les fonctions 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;
    /
    

    La valeur SUBSCRIPTION_ID dans CLOUD_PARAMS est subscription_id de l'application de fonction Azure.

    Cette opération crée le catalogue AZURE_DEMO_CATALOG et catalogue toutes les fonctions de l'élément SUBSCRIPTION_ID fourni.

    Pour plus d'informations, reportez-vous à Procédure CREATE_CATALOG. Vous pouvez interroger les vues DBA_CLOUD_FUNCTION_CATALOG View et USER_CLOUD_FUNCTION_CATALOG View pour extraire la liste de tous les catalogues de la base de données.

  3. Vous pouvez répertorier les fonctions d'un catalogue.

    Voici l'exemple permettant de répertorier les fonctions 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;
    

    Pour plus d'informations, reportez-vous à LIST_FUNCTIONS Procédure.

  4. Exécutez DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS pour créer des fonctions SQL de wrapper. Vous pouvez utiliser l'une des méthodes suivantes pour créer dans le catalogue les fonctions SQL de wrapper qui appellent leurs fonctions cloud respectives :
    • SYNC_FUNCTIONS : SYNC_FUNCTIONS est la méthode la plus rapide et la plus simple, qui synchronise automatiquement (crée ou supprime) les fonctions de wrapper du catalogue avec la liste complète des fonctions Azure. Exemple :

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

    Cela crée un wrapper PL/SQL permettant d'ajouter de nouvelles fonctions au catalogue et de supprimer des wrappers pour les fonctions qui ont été supprimées du catalogue.

    Remarque

    Lorsqu'une fonction Azure est ajoutée, supprimée ou désactivée sur l'application de fonction Azure, vous devez exécuter SYNC_FUNCTIONS pour mettre à jour les wrappers PL/SQL correspondants dans le catalogue.

    Exécutez la requête suivante pour vérifier la synchronisation.

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

    Notez l'utilisateur en cours afin d'exécuter cette commande.

    Pour plus d'informations, reportez-vous à SYNC_FUNCTIONS Procédure.

    • Vous pouvez créer manuellement une fonction SQL dans votre catalogue qui appelle sa fonction Azure respective à l'aide de AZURE_DEMO_CATALOG.

    Exemple de création d'une fonction dans le catalogue 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;
    /
    
    Remarque

    La longueur maximale du nom de fonction est limitée à 100 caractères.

    La fonction AZURE_TESTFUNC est ainsi créée dans le catalogue AZURE_DEMO_CATALOG.

    La fonction AZURE_TESTFUNC du catalogue fait référence à la fonction Azure respective dont l'abonnement est référencé par le paramètre FUNCTION_ID. L'appel de la fonction dans le catalogue avec ses arguments exécute la fonction Azure correspondante et fournit la sortie renvoyée par la fonction.

    Vous pouvez interroger les vues DBA_CLOUD_FUNCTION View et USER_CLOUD_FUNCTION View pour extraire la liste de toutes les fonctions de la base de données.

    Pour plus d'informations, reportez-vous à CREATE_FUNCTION Procédure.

    Pour plus d'informations, reportez-vous à Déclencheur HTTP Azure Functions.

  5. Une fois la fonction créée, vous pouvez utiliser DESCRIBE et l'appeler.
    DESC AZURE_TESTFUNC
    SELECT AZURE_TESTFUNC(NULL) FROM dual;

    Cette action appelle la fonction AZURE_TESTFUNC en appelant la référence de fonction /subscriptions/44496e556-8ssp-4262-b389-0f15f685c879/resources/ADBStest/providers/Microsoft.Web/sites/AZUREADBS/functions/HttpTrigger_example dans le catalogue AZURE_DEMO_CATALOG.

  6. Vous pouvez supprimer une fonction existante à l'aide de la procédure DROP_FUNCTION. Exemples :
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AZURE_DEMO_CATALOG', FUNCTION_NAME => 'AZURE_TESTFUNC');
    
    

    La fonction AZURE_TESTFUNC est supprimée du catalogue AZURE_DEMO_CATALOG.

    Pour plus d'informations, reportez-vous à DROP_FUNCTION Procédure.

  7. Vous pouvez supprimer un catalogue existant à l'aide de la procédure DROP_CATALOG. Exemples :
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AZURE_DEMO_CATALOG'
      );
    END;
    /
    

    Cette opération supprime AZURE_DEMO_CATALOG de la base de données.

    Pour plus d'informations, reportez-vous à DROP_CATALOG Procédure.