DBMS_CLOUD_FUNCTION 패키지
DBMS_CLOUD_FUNCTION 패키지를 사용하면 자율운영 AI 데이터베이스에서 OCI 및 AWS 람다 원격 함수를 SQL 함수로 호출할 수 있습니다.
주:
DBMS_CLOUD_FUNCTION에 대한 지원은 Oracle Database 19c 버전 19.29부터, Oracle AI Database 26ai 버전 23.26부터 제공됩니다.
DBMS_CLOUD_FUNCTION 서브 프로그램 요약
DBMS_CLOUD_FUNCTION 패키지에 포함된 서브 프로그램이 요약되어 있습니다.
표 - DBMS_CLOUD_FUNCTION 서브 프로그램
| 하위 프로그램 | 설명 |
|---|---|
| CREATE_CATALOG 프로시저 | 이 프로시저는 카탈로그를 생성합니다. |
| CREATE_FUNCTION 프로시저 | 이 프로시저는 카탈로그에 함수를 생성합니다. |
| DROP_CATALOG 프로시저 | 이 프로시저는 카탈로그를 사용하여 생성된 카탈로그와 함수를 삭제합니다. |
| DROP_FUNCTION 프로시저 | 이 프로시저는 카탈로그에서 함수를 삭제합니다. |
| LIST_FUNCTIONS 프로시저 | 이 프로시저는 카탈로그에 있는 모든 함수를 나열합니다. |
| SYNC_FUNCTIONS 프로시저 | 이 절차에서는 카탈로그에 새 함수를 추가하고 카탈로그에서 삭제된 함수를 제거할 수 있습니다. |
CREATE_CATALOG 프로시저
DBMS_CLOUD_FUNCTION.CREATE_CATALOG 프로시저는 데이터베이스에 카탈로그를 만듭니다. 카탈로그는 서브 루틴을 실행하는 데 필요한 Infrastructure를 생성하는 일련의 함수입니다. 이 프로시저는 오버로드됩니다.
구문
DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
credential_name IN VARCHAR2,
catalog_name IN VARCHAR2,
service_provider IN VARCHAR2,
cloud_params IN CLOB
);
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
인증에 사용할 인증서의 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
서비스 제공자의 유형을 지정합니다. 이 매개변수는 이 매개변수는 필수입니다. |
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
함수에 매개변수를 제공합니다. 컴파트먼트 OCID 및 지역을 예로 들 수 있습니다. 이 매개변수는 필수입니다. |
예
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
credential_name => 'OCI_CREDENTIAL',
catalog_name => 'OCI_DEMO_CATALOG',
service_provider => 'OCI',
cloud_params => '{"region_id":"us-phoenix-1", "compartment_id":"compartment_id"}'
);
END;
/
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
credential_name => 'AWS_CREDENTIAL',
catalog_name => 'AWS_DEMO_CATALOG',
service_provider => 'AWS',
cloud_params => '{"region_id":"us-phoenix-1"}'
);
END;
/External 프로시저를 사용하여 라이브러리를 생성하려면 오버로드된 프로시저를 사용해야 합니다. 이 절차에는 자격 증명 객체가 필요하지 않습니다. 파라미터에는 EXTPROC VM 및 외부 프로시저가 포함된 공유 라이브러리를 지정해야 합니다. 외부 절차 개요를 참조하십시오.
구문
DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
library_name IN VARCHAR2,
library_listener_url IN VARCHAR2,
library_wallet_dir_name IN VARCHAR2,
library_ssl_server_cert_dn IN VARCHAR2,
library_remote_path IN VARCHAR2
);매개변수
| 매개변수 | 설명 |
|---|---|
|
|
데이터베이스의 카탈로그/라이브러리에 제공된 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
C/C++와 같이 3세대 언어로 작성된 외부 프로시저를 포함하는 공유 라이브러리를 호스팅하는 EXTPROC VM의 FQDN(정규화된 도메인 이름) 및 EXTPROC VM 컨테이너에서 실행 중인 SQL*Net 리스너가 연결 요청을 받아들이는 포트 번호를 지정합니다. 매개변수는
이 매개변수는 필수입니다. |
|
|
자체 서명된 전자 지갑을 임포트하여 저장한 데이터베이스의 DIRECTORY 이름을 지정합니다. |
|
|
전자 지갑에서 가져온 서버 인증서 DN(식별 이름)을 지정합니다. 예:
이 매개변수는 필수입니다. |
|
|
외부 프로시저를 포함하는 라이브러리가 저장되는 EXTPROC VM에 있는 디렉토리의 전체 경로 이름을 지정합니다. 예:
이 매개변수는 필수입니다. |
예
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
library_name => 'EXTPROC_LIBRARY',
library_listener_url => 'extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com:16000',
library_wallet_dir_name => 'EXTPROCWALLETDIR',
library_ssl_server_cert_dn => 'CN=extproc-agent-170798',
library_remote_path => '/u01/app/oracle/extproc_libs/helloCextproc.so'
);
END;
/오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 다음 조건에서 발생합니다.
|
|
|
이 오류는 다음 조건에서 발생합니다.
|
|
|
이 오류는 다음 조건에서 발생합니다.
|
|
|
이 오류는 서비스 제공자가 없을 때 발생합니다. |
사용 노트
-
카탈로그를 생성하려면
ADMIN사용자로 로그인하거나 다음에 대한 권한이 있어야 합니다.-
DBMS_CLOUD_OCI_FNC_FUNCTIONS_INVOKE -
DBMS_CLOUD_OCI_FNC_FUNCTIONS_INVOKE_INVOKE_FUNCTION_RESPONSE_T -
DBMS_CLOUD -
USER_CLOUD_FUNCTION에 대한 읽기 권한 -
USER_CLOUD_FUNCTION_CATALOG에 대한 읽기 권한
-
CREATE_FUNCTION 프로시저
카탈로그에서 해당 클라우드 함수를 호출하는 SQL 함수를 수동으로 생성할 수 있습니다. SYNC_FUNCTIONS가 자동으로 카탈로그의 모든 클라우드 기능에 대한 래퍼를 검색하고 생성하는 동안 CREATE_FUNCTION를 사용하면 사용자정의 반환 유형 및 응답 처리기로 함수를 생성할 수 있습니다. CREATE_FUNCTION 프로시저는 클라우드 함수에만 적용할 수 있습니다.
구문
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION 절차는 클라우드 기능에 대해서만 지원됩니다.
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
credential_name IN VARCHAR2,
catalog_name IN VARCHAR2,
function_name IN VARCHAR2,
function_id IN VARCHAR2,
input_args IN CLOB DEFAULT NULL,
return_type IN VARCHAR2 DEFAULT 'CLOB',
response_handler IN VARCHAR2 DEFAULT NULL
);
response_handler는 다음 형식으로 정의되어야 합니다.
<USER DEFINED TYPE> response_handler_name(function_response in CLOB)RETURNS CLOB;response_handler의 반환 값은 <사용자 정의 유형>이고 response_json은 다음 형식의 두 필드가 있는 JSON 문서입니다.
'{
"status":"<response status>",
"response_body":"<response from the function>"
}'
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
인증에 사용할 인증서의 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
PL/SQL 함수 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
이 매개변수는 필수입니다. |
|
|
입력 인수 및 해당 유형을 수락하는 키 값 JSON 쌍을 지정합니다. |
|
|
함수의 반송 유형을 정의합니다. 반환 유형은 |
|
|
응답을 처리할 사용자 정의 콜백을 지정합니다. |
오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 |
|
|
이 오류는 지정된 카탈로그가 없을 때 발생합니다. |
|
|
이 오류는 지정된 함수가 이미 있을 때 발생합니다. |
|
|
이 오류는 함수 ID 또는 함수 ARN(Amazon Resource Names)이 존재하지 않을 때 발생합니다. |
|
|
이 오류는 입력 인수가 유효하지 않을 때 발생합니다. |
|
|
반환 유형이 누락되었거나 부적합한 경우 이 오류가 발생합니다. |
|
|
응답 처리기가 누락되었거나 부적합한 경우 이 오류가 발생합니다. |
예
함수에 파라미터를 입력하는 간단한 경우:
VAR function_args CLOB;
EXEC :function_args := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}');
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
credential_name => 'DEFAULT_CREDENTIAL',
catalog_name => 'OCI_DEMO_CATALOG',
function_name => 'demo_function',
function_id => 'ocid1.fnfunc.oc1.phx.aaaaaaaazkrbjv6ntowwxlbbp5ct4otsj4o2hdw4ayosyosv4sthmya2lyza',
input_args => :function_args);
);
END;
/
반환 유형 및 응답 처리기가 있는 예제:
VAR input_param CLOB;
VAR l_return_type VARCHAR2(100);
VAR l_response_handler VARCHAR2(1000);
-- Define function parameters
exec :input_param := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}');
PL/SQL procedure successfully completed.
exec :l_return_type := 'fintech_rt';
PL/SQL procedure successfully completed.
exec :l_response_handler := 'fintech_response_handler';
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
credential_name => 'OCI_CRED',
catalog_name => 'OCI_DEMO_CATALOG',
function_name => 'FINTECH_FUNCTION',
function_id => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example',
input_args => :input_param,
return_type => :l_return_type,
response_handler => :l_response_handler
);
END;
/그런 다음 SQL 래퍼 함수를 수동으로 생성하는 동안 이 유형 및 응답 처리기를 사용합니다.
VAR input_param CLOB;
VAR l_return_type VARCHAR2(100);
VAR l_response_handler VARCHAR2(1000);
-- Define function parameters
exec :input_param := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}');
PL/SQL procedure successfully completed.
exec :l_return_type := 'fintech_rt';
PL/SQL procedure successfully completed.
exec :l_response_handler := 'fintech_response_handler';
PL/SQL procedure successfully completed.
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
credential_name => 'OCI_CRED',
catalog_name => 'OCI_DEMO_CATALOG',
function_name => 'FINTECH_FUNCTION',
function_id => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example',
input_args => :input_param,
return_type => :l_return_type,
response_handler => :l_response_handler
);
END;
/함수가 생성되면 함수를 DESCRIBE하여 반환 세부 정보를 가져올 수 있습니다.
DESC fintech_fun
COLUMN STATUS format a30
COLUMN OUTPUT format a30그런 다음 함수를 호출하여 입력 파라미터에 대한 값을 제공할 수 있습니다.
SET SERVEROUTPUT ON
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;
/그러면 OCI_DEMO_CATALOG 카탈로그에서 함수 참조 oocid1.funfn.oci.phx.aaaaaa_example를 호출하여 fintech_fun 클라우드 함수가 호출됩니다.
사용법 참고
External 프로시저 호출 시 유저 정의 함수에 사용된 것과 동일한 구문을 사용할 수 있습니다. 예를 들어, 외부 프로시저에 대한 CREATE_CATALOG 프로시저를 사용하여 데이터베이스에 EXTPROC_LIBRARY이라는 라이브러리를 생성한 경우 이 예제와 같이 SQL 함수를 정의하고 SQL 문에서 호출할 수 있습니다.
SQL> CREATE OR REPLACE FUNCTION HELLOCEXTPROC RETURN VARCHAR2 AS
LANGUAGE C
LIBRARY EXTPROC_LIBRARY
NAME "helloCextproc";
/
Function created.
SQL> SELECT HELLOCEXTPROC() FROM dual;
HELLOCEXTPROC()
----------------------------------------------------------------------------------
Hello C Extproc from FQDN: extproc-agent-170798.subnet-name.vcn-name.oraclevcn.comDROP_CATALOG 프로시저
DBMS_CLOUD_FUNCTION.DROP_CATALOG 프로시저는 카탈로그를 사용하여 만든 카탈로그 및 함수를 삭제합니다.
구문
DBMS_CLOUD_FUNCTION.DROP_CATALOG (
catalog_name IN VARCHAR2
);
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 지정된 카탈로그가 없을 때 발생합니다. |
예:
BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG (
catalog_name => 'OCI_DEMO_CATALOG'
);
END;
/
DROP_FUNCTION 프로시저
DBMS_CLOUD_FUNCTION.DROP_FUNCTION 프로시저는 함수를 삭제합니다.
구문
DBMS_CLOUD_FUNCTION.DROP_FUNCTION 절차는 클라우드 기능에 대해서만 지원됩니다.
DBMS_CLOUD_FUNCTION.DROP_FUNCTION (
catalog_name IN VARCHAR2,
function_name IN VARCHAR2
);
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
삭제할 함수의 이름을 지정합니다. 이 매개변수는 필수입니다. |
오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 지정된 함수가 없을 때 발생합니다. |
예
BEGIN
DBMS_CLOUD_FUNCTION.DROP_FUNCTION (
catalog_name => 'OCI_DEMO_CATALOG',
function_name => 'demo_function');
END;
/
LIST_FUNCTIONS 프로시저
이 프로시저는 카탈로그에 있는 모든 함수를 나열합니다.
주:
LIST_FUNCTIONS 프로시저는 클라우드 함수에만 적용할 수 있습니다.
구문
DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS (
credential_name IN VARCHAR2,
catalog_name IN VARCHAR2,
function_list OUT VARCHAR2
);
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
인증에 사용할 인증서의 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
함수 목록을 JSON 형식으로 반환합니다. 이 매개변수는 필수입니다. |
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 잘못된 파라미터 값이 전달될 때 발생합니다. |
|
|
이 오류는 |
|
|
이 오류는 지정된 카탈로그가 없을 때 발생합니다. |
예:
VAR function_list CLOB;
BEGIN
DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS (
credential_name => 'DEFAULT_CREDENTIAL',
catalog_name => 'OCI_DEMO_CATALOG',
function_list => :function_list);
);
END;
/
SELECT JSON_QUERY(:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual;
SYNC_FUNCTIONS 프로시저
이 절차에서는 카탈로그에 새 함수를 추가하고 카탈로그에서 삭제된 함수를 제거할 수 있습니다.
주:
SYNC_FUNCTIONS 프로시저는 클라우드 함수에만 적용할 수 있습니다.
구문
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
catalog_name IN VARCHAR2,
refresh_rate IN VARCHAR2 DEFAULT 'DAILY'
);
매개변수
| 매개변수 | 설명 |
|---|---|
|
|
카탈로그 이름을 지정합니다. 이 매개변수는 필수입니다. |
|
|
함수의 새로 고침 속도를 지정합니다. refresh_rate는 다음 값을 사용할 수 있습니다.
이 매개변수의 기본값은 |
오류
| 오류 코드 | 설명 |
|---|---|
|
|
이 오류는 지정된 카탈로그가 없을 때 발생합니다. |
|
|
이 오류는 |
예:
BEGIN
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
catalog_name => 'OCI_DEMO_CATALOG'
);
END;
/