Pasos para llamar a las funciones de ejecución de Google Cloud como funciones SQL

Muestra los pasos para llamar a las funciones de Google Cloud Run como funciones SQL en la base de datos.

Para llamar a las funciones de Google Cloud Run como funciones SQL, cree una biblioteca de funciones de envoltorio SQL que hagan referencia a sus respectivas funciones en la nube y las llamen. Antes de crear este catálogo, se supone que ha creado las funciones en la nube necesarias a las que puede hacer referencia este catálogo. Consulte Creación de una función de ejecución en la nube mediante la consola de Google Cloud para obtener más información.

  1. Para acceder a las funciones de Google Cloud Run desde una instancia de Autonomous Database, utilice su cuenta de servicio de Google. Debe otorgar el permiso cloudfunctions.functions.list y los roles Cloud Functions Invoker y Cloud Run Invoker a la cuenta de servicio de Google para la aplicación Google Cloud Platform (GCP).
  2. Crear un catálogo. Para crear un catálogo para las funciones de Google Cloud Run con un usuario que no sea ADMIN, debe otorgar privilegios de lectura en la vista CLOUD_INTEGRATIONS a ese usuario.

    Un catálogo es una recopilación de funciones de envoltorio que hacen referencia a sus respectivas funciones en la nube y las llaman mediante sus puntos finales de 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;
    /
    

    El valor project_id de cloud_params es el ID de proyecto de Google Cloud Platform (GCP).

    Esto crea el catálogo GCP_DEMO_CATALOG y cataloga todas las funciones del project_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. Mostrar las funciones de un catálogo.

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

    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: el método SYNC_FUNCTIONS para crear la función SQL de encapsulador es el método más rápido y sencillo, que sincroniza automáticamente (crea o suprime) las funciones de encapsulador en el catálogo con la lista completa de funciones en la nube definidas en la región, el compartimento y el arrendamiento con los que se ha creado el catálogo. Por ejemplo:

    
    BEGIN
        DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
            catalog_name => 'GCP_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.

    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 en la nube respectiva mediante DBMS_CLOUD.CREATE_FUNCTION.

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

    Esto crea la función GCP_TESTFUNC en el catálogo GCP_DEMO_CATALOG.

    La función GCP_TESTFUNC del catálogo es una referencia a la función de ejecución de Google Cloud correspondiente a la que hace referencia el parámetro FUNCTION_ID al ID de proyecto. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función correspondiente de Google Cloud Run 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.

  5. Después de crear la función, puede DESCRIBE y llamarla.
    DESC GCP_TESTFUNC
    COLUMN STATUS format a30
    COLUMN OUTPUT format a30
    SELECT GCP_TESTFUNC(NULL) FROM dual;

    Esto llama a la función GCP_TESTFUNC llamando a la referencia de función especificada en el parámetro function_id.

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

    Esto borra la función GCP_TESTFUNC del catálogo GCP_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     => 'GCP_DEMO_CATALOG'
     );
    END;
    /

    Esto borra GCP_DEMO_CATALOG de la base de datos.

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