Etapas para Chamar o OCI Cloud Functions como Funções SQL
Mostra as etapas para chamar funções remotas do OCI como funções SQL no seu banco de dados.
Para chamar funções de nuvem no OCI como funções SQL, criaremos um catálogo de funções de encapsulador SQL que fazem referência e chamam sua respectiva função de nuvem por meio de seus pontos finais de API. Antes de criar este catálogo, presume-se aqui que você criou as funções de nuvem necessárias para serem referenciadas por este catálogo.
Consulte Criando e Implantando Funções para obter mais informações sobre a criação e a implantação do Oracle Cloud Infrastructure Functions and Application (ou seja, um grupo de Funções do OCI).
- Crie credenciais usando o procedimento
DBMS_CLOUD.CREATE_CREDENTIAL
. O objeto de credencial que você está criando deve ser do tipo chave 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.Isso cria a credencial
OCI_CRED
.Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.
Observação
Se você estiver usando um Controlador de Recursos para autenticação, as políticas necessárias necessárias para o acesso ao OCI Function deverão ser configuradas. Consulte Detalhes do serviço Functions para obter mais informações. - Criar um catálogo.
Um catálogo é uma coleção de funções wrapper que fazem referência e chamam suas respectivas funções de nuvem por meio de seus pontos finais de API.
Exemplo para criar um catálogo para o 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.Isso cria o catálogo
OCI_DEMO_CATALOG
.Consulte CREATE_CATALOG Procedimento para obter mais informações. Você pode consultar as views DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View para recuperar a lista de todos os catálogos do seu banco de dados.
- Você pode listar as funções em um catálogo.
Veja a seguir o exemplo para listar o 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 LIST_FUNCTIONS Procedimento para obter mais informações.
- Execute
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
para criar funções SQL wrapper. Você pode usar um dos seguintes métodos para criar as funções SQL wrapper no catálogo, que chamam suas respectivas funções de nuvem:-
SYNC_FUNCTIONS:
SYNC_FUNCTIONS
é o método mais rápido e simples, que sincroniza automaticamente (cria ou exclui) funções wrapper no catálogo com a lista completa de funções de nuvem definidas na região, compartimento e tenancy com a qual o catálogo foi criado. Por exemplo:
BEGIN
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
( catalog_name => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Isso cria um wrapper PL/SQL para adicionar novas funções ao catálogo e remover wrappers para funções que foram excluídas do catálogo.
Execute a seguinte consulta para verificar a sincronização.
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
Observação
Anote o usuário atual para executar esse comando.Consulte SYNC_FUNCTIONS Procedimento para obter mais informações.
- Você pode criar manualmente uma Função
SQL
em seu catálogo que chame sua respectiva função de nuvem usandoDBMS_CLOUD.CREATE_FUNCTION
. Por exemplo:
Exemplo para criar uma função no 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.Isso cria a função
FINTECH_FUN
no catálogoOCI_DEMO_CATALOG
.A função
FINTECH_FUN
no catálogo é uma referência à respectiva função de nuvem cujo ponto final é referenciado pelo parâmetroFUNCTION_ID
. Chamar a função no catálogo junto com seus argumentos executa a função de nuvem correspondente e fornece a saída retornada pela função de nuvem.A criação manual de uma função no catálogo também permite criar tipos de retorno personalizados e handlers de resposta. Por exemplo:
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_response_handler varchar2(1000); exec :input_param := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); exec :l_return_type := 'fintech_rt'; exec :l_response_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 ,RESPONSE_HANDLER =>:l_response_handler); PL/SQL procedure successfully completed.
Você pode consultar as views DBA_CLOUD_FUNCTION View e USER_CLOUD_FUNCTION View para recuperar a lista de todas as funções do seu banco de dados.
Consulte CREATE_FUNCTION Procedimento para obter mais informações.
-
- Depois que a função for criada, você poderá
DESCRIBE
e chamá-la.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.
Isso chama a função de nuvem
fintech_fun
chamando a referência de funçãooocid1.funfn.oci.phx.aaaaaa_example
no catálogoOCI_DEMO_CATALOG
. - Você pode eliminar uma função existente usando o procedimento
DROP_FUNCTION
. Por exemplo:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_NAME => 'fintech_fun'); PL/SQL procedure successfully completed.
Isso elimina a função
FINTECH_FUN
do catálogoOCI_DEMO_CATALOG
.Consulte DROP_FUNCTION Procedimento para obter mais informações.
- Você pode eliminar um catálogo existente usando o procedimento
DROP_CATALOG
. Por exemplo:BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG
( catalog_name => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Isso elimina o
OCI_DEMO_CATALOG
do seu banco de dados.Consulte DROP_CATALOG Procedimento para obter mais informações.
Tópico principal: Chamar Funções Definidas pelo Usuário