Etapes d'appel des fonctions d'exécution Google Cloud en tant que fonctions SQL

Présente les étapes permettant d'appeler des fonctions Google Cloud Run en tant que fonctions SQL dans votre base de données.

Pour appeler des fonctions Google Cloud Run en tant que fonctions SQL, vous créez une bibliothèque de fonctions de wrapper SQL qui référencent et appellent leurs fonctions cloud respectives. Avant de créer ce catalogue, il est supposé que vous avez créé les fonctions cloud nécessaires pour y faire référence. Pour plus d'informations, reportez-vous à Création d'une fonction d'exécution cloud à l'aide de la console Google Cloud.

  1. Pour accéder aux fonctions d'exécution Google Cloud à partir d'une instance Autonomous Database, utilisez votre compte de service Google. Vous devez accorder le droit d'accès cloudfunctions.functions.list et les rôles Cloud Functions Invoker et Cloud Run Invoker au compte de service Google pour l'application Google Cloud Platform (GCP).
  2. Créer un catalogue. Afin de créer un catalogue pour les fonctions d'exécution Google Cloud avec un utilisateur autre que ADMIN, vous devez accorder des privilèges de lecture sur la vue CLOUD_INTEGRATIONS à cet utilisateur.

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

    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
            credential_name  => 'GCP$PA', 
            catalog_name     => 'GCP_DEMO_CATALOG', 
            service_provider => 'GCP',
            cloud_params     => '{"project_id":"example_XXXXXX"}'
     );
    END;
    /
    

    La valeur project_id dans cloud_params est l'ID de projet de Google Cloud Platform (GCP).

    Cela crée le catalogue GCP_DEMO_CATALOG et catalogue toutes les fonctions de l'élément project_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. Répertoriez les fonctions d'un catalogue.

    Voici l'exemple de liste des fonctions Google Cloud Run :

    VAR function_list CLOB;
    
    BEGIN
        DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS (
            credential_name  => 'GCP$PA',
            catalog_name     => 'GCP_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 à Procédure LIST_FUNCTIONS.

  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 : la méthode SYNC_FUNCTIONS permettant de créer une fonction SQL de wrapper 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 cloud définies dans la région, le compartiment et la location avec lesquels le catalogue a été créé. Exemples :

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

    Cela crée un wrapper PL/SQL pour ajouter de nouvelles fonctions au catalogue et supprimer des wrappers pour les fonctions qui ont été supprimées du 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 pour exécuter cette commande.

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

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

    Exemple de création d'une fonction dans le catalogue GCP_DEMO_CATALOG.

    EXEC :function_args  := TO_CLOB('{"name": "VARCHAR2"}');
    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
            credential_name => 'GCP$PA',
            catalog_name    => 'GCP_DEMO_CATALOG',
            function_name   => 'gcp_testfunc',
            function_id     => 'function_id_path',
            input_args      => :function_args
     );
    END;
    /
    

    La fonction GCP_TESTFUNC est ainsi créée dans le catalogue GCP_DEMO_CATALOG.

    La fonction GCP_TESTFUNC du catalogue fait référence à la fonction d'exécution Google Cloud respective dont l'ID de projet 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 Google Cloud Run 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 à Procédure CREATE_FUNCTION.

  5. Une fois la fonction créée, vous pouvez utiliser DESCRIBE et l'appeler.
    DESC GCP_TESTFUNC
    COLUMN STATUS format a30
    COLUMN OUTPUT format a30
    SELECT GCP_TESTFUNC(NULL) FROM dual;

    Cette opération appelle la fonction GCP_TESTFUNC en appelant la référence de fonction indiquée dans le paramètre function_id.

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

    Cette opération supprime la fonction GCP_TESTFUNC du catalogue GCP_DEMO_CATALOG.

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

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

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

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