Pasos para llamar a OCI Cloud Functions como funciones SQL
Muestra los pasos para llamar a funciones remotas de OCI como funciones SQL en la base de datos.
Para llamar a funciones en la nube en OCI como funciones SQL, crearemos 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 en la nube necesarias a las que se hará referencia en este catálogo.
Consulte Creación y despliegue de funciones para obtener más información sobre la creación y el despliegue de Oracle Cloud Infrastructure Functions y la aplicación (es decir, un grupo de OCI Functions).
- Cree credenciales mediante el procedimiento
DBMS_CLOUD.CREATE_CREDENTIAL
. El objeto de credencial que está creando debe ser de tipo clave privada.SET DEFINE OFF BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
( credential_name => 'OCI_CRED', user_ocid => 'user_ocid', tenancy_ocid => 'tenancy_ocid', private_key => 'private_key', fingerprint => 'fingerprint' ); END; / PL/SQL procedure successfully completed.Esto crea la credencial
OCI_CRED
.Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.
Nota
Si utiliza una entidad de recurso para la autenticación, se deben configurar las políticas necesarias para el acceso a la función de OCI. Consulte Detalles de Functions para obtener más información. - 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 Oracle Cloud Infrastructure Functions.
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG
( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', service_provider => 'OCI', cloud_params => '{"region_id":"phx", "compartment_id":"compartment_id"}' ); END; / PL/SQL procedure successfully completed.Esto crea el catálogo
OCI_DEMO_CATALOG
.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.
- Puede mostrar las funciones de un catálogo.
A continuación, se muestra un ejemplo para mostrar Oracle Cloud Infrastructure Functions:
VAR function_list CLOB; BEGIN
DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS
( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', function_list => :function_list ); END; / PL/SQL procedure successfully completed. SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual; SEARCH_RESULTS --This is a sample output ------------------------------------------------------------------------------------------------ [ { "functionName" : "create_par", "functionId" : "ocid.funfc.oc1.phx.aaaa_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, { "functionName" : "fintech", "functionId" : "ocid.funfc.oc1.phx.bbbb_example" SEARCH_RESULTS ------------------------------------------------------------------------------------------------ 4ayosyosv4sthmya2lyza", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud.com_example" }, { "functionName" : "jwt_codec", "functionId" : "ocid.funfc.oc1.phx.jwt_code_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, SEARCH_RESULTS ------------------------------------------------------------------------------------------------ { "functionName" : "oci-objectstorage-create-par-python", "functionId" : "ocid.funfc.oc1.phx.aaaaaaaas_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, { "functionName" : "run_dbt", "functionId" : "ocid.funfc.oc1.phx.aaaaaaaav_example", SEARCH_RESULTS ------------------------------------------------------------------------------------------------ "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" } ]Consulte el procedimiento LIST_FUNCTIONS para obtener más información.
- 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 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 => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.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'; OBJECT_NAME -------------------------------------------------------------------------------- CREATE_PAR FINTECH JWT_CODEC OCI-OBJECTSTORAGE-CREATE-PAR-PYTHON RUN_DBT
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 en la nube respectiva medianteDBMS_CLOUD.CREATE_FUNCTION
. Por ejemplo:
Ejemplo para crear una función en el catálogo
OCI_DEMO_CATALOG
.VAR function_args CLOB; EXEC :function_args := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION
( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', function_name => 'fintech_fun', function_id => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example', input_args => :function_args ); END; / PL/SQL procedure successfully completed.Esto crea la función
FINTECH_FUN
en el catálogoOCI_DEMO_CATALOG
.La función
FINTECH_FUN
del catálogo es una referencia a la función en la nube correspondiente cuyo punto final hace referencia al parámetroFUNCTION_ID
. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función de nube correspondiente y proporciona la salida devuelta por la función de nube.La creación manual de una función en el catálogo también permite crear tipos de retorno personalizados y manejadores de respuestas. Por ejemplo:
CREATE OR REPLACE TYPE fintech_rt AS OBJECT ( STATUS VARCHAR2(1000), OUTPUT CLOB ); / Type created.
CREATE OR REPLACE FUNCTION fintech_response_handler(function_response in CLOB) RETURN fintech_rt IS l_comp fintech_rt; l_json_obj JSON_OBJECT_T; status VARCHAR2(1000); output CLOB; BEGIN l_json_obj := JSON_OBJECT_T.parse(function_response); status := l_json_obj.get('STATUS').to_string; output := l_json_obj.get('RESPONSE_BODY').to_string; l_comp := fintech_rt(status,output); RETURN l_comp; END; / Function created. VAR input_param clob; VAR l_return_type varchar2(100); VAR l_reponse_handler varchar2(1000); exec :input_param := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); exec :l_return_type := 'fintech_rt'; exec :l_reponse_handler := 'fintech_response_handler'; PL/SQL procedure successfully completed. PL/SQL procedure successfully completed. PL/SQL procedure successfully completed. EXEC DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (CREDENTIAL_NAME => 'OCI_CRED', FUNCTION_NAME => 'fintech_fun', CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_ID => 'ocid1.funfn.oci.phx.aaaaaa_example', INPUT_ARGS => :input_param, RETURN_TYPE => :l_return_type ,REPONSE_HANDLER =>:l_reponse_handler); PL/SQL procedure successfully completed.
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.
-
- Una vez creada la función, puede ejecutar
DESCRIBE
y llamarla.DESC fintech_fun COLUMN STATUS format a30 COLUMN OUTPUT format a30
DECLARE l_comp fintech_rt; BEGIN l_comp := fintech_fun(command=>'tokenize',value => 'PHI_INFORMATION'); DBMS_OUTPUT.put_line ('Status of the function = '|| l_comp.status); DBMS_OUTPUT.put_line ('Response of the function = '|| l_comp.output); END; / PL/SQL procedure successfully completed.
Esto llama a la función en la nube
fintech_fun
llamando a la referencia de funciónoocid1.funfn.oci.phx.aaaaaa_example
en el catálogoOCI_DEMO_CATALOG
. - Puede borrar una función existente mediante el procedimiento
DROP_FUNCTION
. Por ejemplo:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_NAME => 'fintech_fun'); PL/SQL procedure successfully completed.
Esto borra la función
FINTECH_FUN
del catálogoOCI_DEMO_CATALOG
.Consulte el procedimiento DROP_FUNCTION para obtener más información.
- Puede borrar un catálogo existente mediante el procedimiento
DROP_CATALOG
. Por ejemplo:BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG
( catalog_name => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Esto borra
OCI_DEMO_CATALOG
de la base de datos.Consulte el procedimiento DROP_CATALOG para obtener más información.
Tema principal: Llamada a funciones definidas por el usuario