Passi per richiamare le funzioni di esecuzione di Google Cloud come funzioni SQL

Mostra i passi per richiamare le funzioni di Google Cloud Run come funzioni SQL nel database.

Per richiamare le funzioni di Google Cloud Run come funzioni SQL, è possibile creare una libreria di funzioni wrapper SQL che fanno riferimento e richiamano le rispettive funzioni cloud. Prima di creare questo catalogo, si presume che siano state create le funzioni cloud necessarie a cui questo catalogo fa riferimento. Per ulteriori informazioni, vedere Creare una funzione Cloud Run utilizzando la console di Google Cloud.

  1. Per accedere alle funzioni di Google Cloud Run da un'istanza di Autonomous Database, utilizzare l'account del servizio Google. È necessario concedere l'autorizzazione cloudfunctions.functions.list e i ruoli Cloud Functions Invoker e Cloud Run Invoker all'account di servizio Google per l'applicazione Google Cloud Platform (GCP).
  2. Creare un catalogo. Per creare un catalogo per le funzioni di Google Cloud Run con un utente diverso da ADMIN, è necessario concedere a tale utente i privilegi di lettura sulla vista CLOUD_INTEGRATIONS.

    Un catalogo è una raccolta di funzioni wrapper che fanno riferimento e richiamano le rispettive funzioni cloud utilizzando gli endpoint 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;
    /
    

    Il valore project_id nel file cloud_params è l'ID progetto della piattaforma Google Cloud (GCP).

    Questo crea il catalogo GCP_DEMO_CATALOG e cataloga tutte le funzioni del project_id fornito.

    Per ulteriori informazioni, vedere CREATE_CATALOG Procedura. È possibile eseguire una query sulle viste DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View per recuperare la lista di tutti i cataloghi nel database.

  3. Elenca le funzioni in un catalogo.

    Di seguito è riportato l'esempio per elencare le funzioni di 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;
    

    Per ulteriori informazioni, vedere LIST_FUNCTIONS Procedura.

  4. Eseguire DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS per creare funzioni SQL wrapper. È possibile utilizzare uno dei seguenti metodi per creare le funzioni SQL wrapper nel catalogo, che richiamano le rispettive funzioni cloud:
    • SYNC_FUNCTIONS: il metodo SYNC_FUNCTIONS per creare la funzione SQL wrapper è il metodo più rapido e semplice, che sincronizza automaticamente (crea o elimina) le funzioni wrapper nel catalogo con la lista completa delle funzioni cloud definite nell'area, nel compartimento e nella tenancy con cui è stato creato il catalogo. Ad esempio:

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

    In questo modo viene creato un wrapper PL/SQL per l'aggiunta di nuove funzioni al catalogo e la rimozione dei wrapper per le funzioni eliminate dal catalogo.

    Eseguire la seguente query per verificare la sincronizzazione.

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

    Per eseguire questo comando, conservare una nota dell'utente corrente.

    Per ulteriori informazioni, vedere SYNC_FUNCTIONS Procedura.

    • È possibile creare manualmente nel catalogo una funzione SQL che richiama la rispettiva funzione cloud utilizzando DBMS_CLOUD.CREATE_FUNCTION.

    Esempio di creazione di una funzione nel catalogo 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;
    /
    

    In questo modo viene creata la funzione GCP_TESTFUNC nel catalogo GCP_DEMO_CATALOG.

    La funzione GCP_TESTFUNC nel catalogo fa riferimento alla rispettiva funzione di esecuzione di Google Cloud a cui il parametro FUNCTION_ID fa riferimento l'ID progetto. Richiamando la funzione nel catalogo insieme ai relativi argomenti viene eseguita la funzione di esecuzione di Google Cloud corrispondente e viene fornito l'output restituito dalla funzione.

    È possibile eseguire una query sulle viste DBA_CLOUD_FUNCTION View e USER_CLOUD_FUNCTION View per recuperare la lista di tutte le funzioni del database.

    Per ulteriori informazioni, vedere CREATE_FUNCTION Procedura.

  5. Dopo aver creato la funzione, è possibile DESCRIBE e richiamarla.
    DESC GCP_TESTFUNC
    COLUMN STATUS format a30
    COLUMN OUTPUT format a30
    SELECT GCP_TESTFUNC(NULL) FROM dual;

    La funzione GCP_TESTFUNC viene richiamata richiamando il riferimento funzione specificato nel parametro function_id.

  6. È possibile eliminare una funzione esistente utilizzando la procedura DROP_FUNCTION. Ad esempio:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'GCP_DEMO_CATALOG', FUNCTION_NAME => 'GCP_TESTFUNC');
    

    La funzione GCP_TESTFUNC viene eliminata dal catalogo GCP_DEMO_CATALOG.

    Per ulteriori informazioni, vedere DROP_FUNCTION Procedura.

  7. È possibile eliminare un catalogo esistente utilizzando la procedura DROP_CATALOG. Ad esempio:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
            catalog_name     => 'GCP_DEMO_CATALOG'
     );
    END;
    /

    Viene eliminato GCP_DEMO_CATALOG dal database.

    Per ulteriori informazioni, vedere DROP_CATALOG Procedura.