Schritte zum Aufrufen von OCI Cloud-Funktionen als SQL-Funktionen
Zeigt die Schritte zum Aufrufen von OCI-Remotefunktionen als SQL-Funktionen in Ihrer Datenbank an.
Um Cloud-Funktionen in OCI als SQL-Funktionen aufzurufen, erstellen wir einen Katalog von SQL-Wrapper-Funktionen, die ihre jeweilige Cloud-Funktion über ihre API-Endpunkte referenzieren und aufrufen. Bevor Sie diesen Katalog erstellen, wird hier davon ausgegangen, dass Sie die erforderlichen Cloud-Funktionen erstellt haben, die von diesem Katalog referenziert werden sollen.
Weitere Informationen zum Erstellen und Deployment von Oracle Cloud Infrastructure Functions und Anwendung (d.h. einer Gruppe von OCI Functions) finden Sie unter Funktionen erstellen und bereitstellen.
- Erstellen Sie Zugangsdaten mit der Prozedur
DBMS_CLOUD.CREATE_CREDENTIAL. Das Zugangsdatenobjekt, das Sie erstellen, muss vom Typ "Private Key" sein.SET DEFINE OFF BEGINDBMS_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.Dadurch werden die Zugangsdaten
OCI_CREDerstellt.Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.
Hinweis
Wenn Sie einen Resource Principal zur Authentifizierung verwenden, müssen die erforderlichen Policys für den Zugriff auf die OCI-Funktion konfiguriert werden. Weitere Informationen finden Sie unter Details für Funktionen. - Katalog erstellen.
Ein Katalog ist eine Sammlung von Wrapper-Funktionen, die ihre jeweiligen Cloud-Funktionen über ihre API-Endpunkte referenzieren und aufrufen.
Beispiel zum Erstellen eines Katalogs für Oracle Cloud Infrastructure Functions.
BEGINDBMS_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.Dadurch wird der
OCI_DEMO_CATALOG-Katalog erstellt.Weitere Informationen finden Sie unter Prozedur CREATE_CATALOG. Sie können die Ansichten DBA_CLOUD_FUNCTION_CATALOG View und USER_CLOUD_FUNCTION_CATALOG View abfragen, um die Liste aller Kataloge in Ihrer Datenbank abzurufen.
- Sie können die Funktionen in einem Katalog auflisten.
Das folgende Beispiel führt Oracle Cloud Infrastructure Functions auf:
VAR function_list CLOB; BEGINDBMS_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" } ]Weitere Informationen finden Sie unter Prozedur LIST_FUNCTIONS.
- Führen Sie
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONSaus, um Wrapper-SQL-Funktionen zu erstellen. Mit einer der folgenden Methoden können Sie die Wrapper-SQL-Funktionen im Katalog erstellen, die ihre jeweiligen Cloud-Funktionen aufrufen:-
SYNC_FUNCTIONS:
SYNC_FUNCTIONSist die schnellste und einfachste Methode, mit der Wrapper-Funktionen im Katalog automatisch mit der vollständigen Liste der Cloud-Funktionen synchronisiert (erstellt oder löscht), die in der Region, dem Compartment und dem Mandanten definiert sind, mit dem der Katalog erstellt wurde. Beispiel:
BEGINDBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS( catalog_name => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Dadurch wird ein PL/SQL-Wrapper erstellt, um dem Katalog neue Funktionen hinzuzufügen und Wrapper für Funktionen zu entfernen, die aus dem Katalog gelöscht wurden.
Führen Sie die folgende Abfrage aus, um die Synchronisierung zu überprüfen.
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_DBTHinweis
Notieren Sie sich den aktuellen Benutzer, um diesen Befehl auszuführen.Weitere Informationen finden Sie unter Prozedur SYNC_FUNCTIONS.
- Sie können manuell eine
SQL-Funktion in Ihrem Katalog erstellen, die ihre jeweilige Cloud-Funktion mitDBMS_CLOUD.CREATE_FUNCTIONaufruft. Beispiel:
Beispiel zum Erstellen einer Funktion im
OCI_DEMO_CATALOG-Katalog.VAR function_args CLOB; EXEC :function_args := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); BEGINDBMS_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.Dadurch wird die Funktion
FINTECH_FUNim KatalogOCI_DEMO_CATALOGerstellt.Die Funktion
FINTECH_FUNim Katalog ist eine Referenz auf die jeweilige Cloud-Funktion, deren Endpunkt vom ParameterFUNCTION_IDreferenziert wird. Wenn Sie die Funktion im Katalog zusammen mit den zugehörigen Argumenten aufrufen, wird die entsprechende Cloud-Funktion ausgeführt und die von der Cloud-Funktion zurückgegebene Ausgabe bereitgestellt.Wenn Sie eine Funktion im Katalog manuell erstellen, können Sie auch benutzerdefinierte Rückgabetypen und Antwort-Handler erstellen. Beispiel:
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.Sie können die Ansichten DBA_CLOUD_FUNCTION View und USER_CLOUD_FUNCTION View abfragen, um die Liste aller Funktionen in Ihrer Datenbank abzurufen.
Weitere Informationen finden Sie unter Prozedur CREATE_FUNCTION.
-
- Nachdem die Funktion erstellt wurde, können Sie
DESCRIBEaufrufen und sie aufrufen.DESC fintech_fun COLUMN STATUS format a30 COLUMN OUTPUT format a30DECLARE 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.Dadurch wird die Cloudfunktion
fintech_funaufgerufen, indem die Funktionsreferenzoocid1.funfn.oci.phx.aaaaaa_exampleim KatalogOCI_DEMO_CATALOGaufgerufen wird. - Sie können eine vorhandene Funktion mit der Prozedur
DROP_FUNCTIONlöschen. Beispiel:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'OCI_DEMO_CATALOG', FUNCTION_NAME => 'fintech_fun'); PL/SQL procedure successfully completed.Dadurch wird die Funktion
FINTECH_FUNaus dem KatalogOCI_DEMO_CATALOGgelöscht.Weitere Informationen finden Sie unter Prozedur DROP_FUNCTION.
- Sie können einen vorhandenen Katalog mit der Prozedur
DROP_CATALOGlöschen. Beispiel:BEGINDBMS_CLOUD_FUNCTION.DROP_CATALOG( catalog_name => 'OCI_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Dadurch wird
OCI_DEMO_CATALOGaus der Datenbank gelöscht.Weitere Informationen finden Sie unter Prozedur DROP_CATALOG.
Übergeordnetes Thema: Benutzerdefinierte Funktionen aufrufen