DBMS_CLOUD REST API

本节介绍在专用 Exadata 基础结构上随 Autonomous AI Database 提供的 DBMS_CLOUD REST API。

Prerequisites

作为开发人员,您可以将 DBMS_CLOUD 过程与部署在 Oracle Public Cloud、Multicloud 或 Exadata Cloud@Customer 上的自治 AI 数据库结合使用。

根据部署选择,必须满足以下先决条件,才能将 DBMS_CLOUD 过程与 Amazon S3、Azure Blob Storage 和 Google Cloud Storage 服务提供商结合使用。

DBMS_CLOUD REST API 汇总

本节介绍自治 AI 数据库随附的 DBMS_CLOUD REST API。

REST API 说明
GET_RESPONSE_HEADERS 函数 此函数将 HTTP 响应标头作为自治 AI 数据库中 JSON 对象中的 JSON 数据返回。
GET_RESPONSE_TEXT 函数 此函数返回自治 AI 数据库中 TEXT 格式(VARCHAR2CLOB)的 HTTP 响应。通常,大多数云 REST API 以文本格式返回 JSON 响应。如果希望 HTTP 响应为文本格式,则此函数非常有用。
GET_API_RESULT_CACHE_SIZE 函数 此函数返回配置的结果高速缓存大小。
SEND_REQUEST 函数和过程 此函数将启动 HTTP 请求,获取响应,并在自治 AI 数据库中结束响应。此函数提供用于发送包含参数的云 REST API 请求以及返回响应代码和有效负载的工作流。
SET_API_RESULT_CACHE_SIZE 过程 此过程设置当前会话的最大高速缓存大小。

DBMS_CLOUD REST API 概述

当您在应用中使用 PL/SQL 并且需要调用云 REST API 时,可以使用 DBMS_CLOUD.SEND_REQUEST 发送 REST API 请求。

DBMS_CLOUD REST API 函数允许您使用 DBMS_CLOUD.SEND_REQUEST 发出 HTTP 请求并获取和保存结果。这些函数提供了通用的 API,可用于使用支持的以下云服务调用任何 REST API:

DBMS_CLOUD REST API 常量

介绍使用 DBMS_CLOUD.SEND_REQUEST 发出 HTTP 请求的 DBMS_CLOUD 常量。

DBMS_CLOUD 支持 GETPUTPOSTHEADDELETE HTTP 方法。用于 HTTP 请求的 REST API 方法通常记录在云 REST API 文档中。

名称 类型
METHOD_DELETE VARCHAR2(6) 'DELETE'
METHOD_GET VARCHAR2(3) 'GET'
METHOD_HEAD VARCHAR2(4) 'HEAD'
METHOD_POST VARCHAR2(4) 'POST'
METHOD_PUT VARCHAR2(3) 'PUT'

DBMS_CLOUD REST API 结果高速缓存

使用 DBMS_CLOUD.SEND_REQUESTcache 参数设置为 true 时,可以保存 DBMS_CLOUD REST API 结果。SESSION_CLOUD_API_RESULTS 视图描述保存 REST API 结果时可以使用的列。

默认情况下,DBMS_CLOUD REST API 调用不会保存会话的结果。在这种情况下,可以使用 DBMS_CLOUD.SEND_REQUEST 函数返回结果。

使用 DBMS_CLOUD.SEND_REQUEST 并将 cache 参数设置为 TRUE 时,将保存结果,您可以在 SESSION_CLOUD_API_RESULTS 视图中查看过去的结果。当您需要在应用中使用以前的结果时,保存和查询 DBMS_CLOUD REST API 请求的历史结果可以帮助您。

例如,要查询最近的 DBMS_CLOUD REST API 结果,请使用视图 SESSION_CLOUD_API_RESULTS

SELECT timestamp FROM SESSION_CLOUD_API_RESULTS;

使用 DBMS_CLOUD.SEND_REQUEST 保存 DBMS_CLOUD REST API 结果时,保存的数据仅在同一会话(连接)中可用。会话退出后,保存的数据将不再可用。

使用 DBMS_CLOUD.GET_API_RESULT_CACHE_SIZEDBMS_CLOUD.SET_API_RESULT_CACHE_SIZE 可查看和设置 DBMS_CLOUD REST API 高速缓存大小以及禁用高速缓存。

DBMS_CLOUD REST API 结果 cache_scope 参数

使用 DBMS_CLOUD.SEND_REQUEST 保存 DBMS_CLOUD REST API 结果时,将根据 cache_scope 的值提供对 SESSION_CLOUD_API_RESULTS 中结果的访问权限。

默认情况下,cache_scope'PRIVATE',只有会话的当前用户才能访问结果。如果将 cache_scope 设置为 'PUBLIC',则所有会话用户都可以访问结果。cache_scope 的默认值指定每个用户只能看到由调用者的权限调用的过程生成的 DBMS_CLOUD.SEND_REQUEST REST API 结果。在会话中调用 DBMS_CLOUD.SEND_REQUEST 时,有三种可能性根据 cache_scope 值确定当前用户是否可以在高速缓存中看到结果:

DBMS_CLOUD REST API SESSION_CLOUD_API_RESULTS 视图

使用 DBMS_CLOUD.SEND_REQUESTcache 参数设置为 true 时,可以保存 DBMS_CLOUD REST API 结果。SESSION_CLOUD_API_RESULTS 视图描述保存 REST API 结果时可以使用的列。

视图 SESSION_CLOUD_API_RESULTS 是使用 DBMS_CLOUD.SEND_REQUEST 高速缓存结果时创建的视图。您可以查询属于您的用户会话的历史结果。会话结束时,将清除 SESSION_CLOUD_API_RESULTS 中的数据。

说明
URI DBMS_CLOUD REST API 请求 URL
TIMESTAMP DBMS_CLOUD REST API 响应时间戳
CLOUD_TYPE DBMS_CLOUD REST API 云类型,例如 Oracle Cloud Infrastructure 和 AZURE_BLOB
REQUEST_METHOD DBMS_CLOUD REST API 请求方法,例如 GETPUTHEAD
REQUEST_HEADERS DBMS_CLOUD REST API 请求标头
REQUEST_BODY_TEXT CLOB 中的 DBMS_CLOUD REST API 请求正文
RESPONSE_STATUS_CODE DBMS_CLOUD REST API 响应状态代码,例如 200(OK)404(Not Found)
RESPONSE_HEADERS DBMS_CLOUD REST API 响应标头
RESPONSE_BODY_TEXT CLOB 中的 DBMS_CLOUD REST API 响应正文
SCOPE DBMS_CLOUD.SEND_REQUEST 设置的 cache_scope。有效值为 PUBLICPRIVATE

GET_RESPONSE_HEADERS 函数

此函数将 HTTP 响应标头作为 JSON 对象中的 JSON 数据返回。

语法

DBMS_CLOUD.GET_RESPONSE_HEADERS(
       resp          IN DBMS_CLOUD_TYPES.resp)
   RETURN JSON_OBJECT_T;

参数

Parameter (参数) 说明
resp DBMS_CLOUD.SEND_REQUEST 返回的 HTTP 响应类型。

异常错误

例外 错误 说明
invalid_response ORA-20025 传递给 DBMS_CLOUD.GET_RESPONSE_HEADERS 的响应类型对象无效。

GET_RESPONSE_TEXT 函数

此函数以 TEXT 格式(VARCHAR2CLOB)返回 HTTP 响应。通常,大多数云 REST API 以文本格式返回 JSON 响应。如果希望 HTTP 响应为文本格式,则此函数非常有用。

语法

DBMS_CLOUD.GET_RESPONSE_TEXT(
       resp          IN DBMS_CLOUD_TYPES.resp)
   RETURN CLOB;

参数

Parameter (参数) 说明
resp DBMS_CLOUD.SEND_REQUEST 返回的 HTTP 响应类型。

异常错误

例外 错误 说明
invalid_response ORA-20025 传递给 DBMS_CLOUD.GET_RESPONSE_TEXT 的响应类型对象无效。

GET_API_RESULT_CACHE_SIZE 函数

此函数返回配置的结果高速缓存大小。高速缓存大小值仅适用于当前会话。

语法

DBMS_CLOUD.GET_API_RESULT_CACHE_SIZE()
   RETURN NUMBER;

SEND_REQUEST 函数和过程

此函数和过程将启动 HTTP 请求,获取响应并结束响应。此函数提供用于发送带参数的云 REST API 请求的工作流,并且该函数返回响应代码和有效负载。如果使用此过程,则可以使用 SESSION_CLOUD_API_RESULTS 视图查看已保存结果中的结果和响应详细信息。

语法

DBMS_CLOUD.SEND_REQUEST(
       credential_name    IN VARCHAR2,
       uri                IN VARCHAR2,
       method             IN VARCHAR2,
       headers            IN CLOB DEFAULT NULL,
       async_request_url  IN VARCHAR2 DEFAULT NULL,
       wait_for_states    IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
       timeout            IN NUMBER DEFAULT 0,
       cache              IN PL/SQL BOOLEAN DEFAULT FALSE,
       cache_scope        IN VARCHAR2 DEFAULT 'PRIVATE',
       body               IN BLOB DEFAULT NULL)
   RETURN DBMS_CLOUD_TYPES.resp;

DBMS_CLOUD.SEND_REQUEST(
       credential_name    IN VARCHAR2,
       uri                IN VARCHAR2,
       method             IN VARCHAR2,
       headers            IN CLOB DEFAULT NULL,
       async_request_url  IN VARCHAR2 DEFAULT NULL,
       wait_for_states    IN DBMS_CLOUD_TYPES.wait_for_states_t DEFAULT NULL,
       timeout            IN NUMBER DEFAULT 0,
       cache              IN PL/SQL BOOLEAN DEFAULT FALSE,
       cache_scope        IN VARCHAR2 DEFAULT 'PRIVATE',
       body               IN BLOB DEFAULT NULL);

参数

Parameter (参数) 说明
credential_name 用于使用相应云原生 API 进行验证的身份证明的名称。
uri 用于发出请求的 HTTP URI。
method

HTTP 请求方法:GETPUTPOSTHEADDELETE。使用 DBMS_CLOUD 程序包常量指定方法。

有关详细信息,请参阅 DBMS_CLOUD REST API 常量

headers JSON 格式的对应云原生 API 的 HTTP 请求标头。验证标头是自动设置的,仅传递定制标头。
async_request_url

异步请求 URL。

要获取 URL,请从 API 列表中选择请求 API(请参见 https://docs.cloud.oracle.com/en-us/iaas/api/ )。然后,在左侧窗格中导航以查找请求的 API。例如,Database Services API -> Autonomous AI Database -> StopAutonomousDatabase。此页显示 API 主目录(并显示基本端点)。然后,使用为工作请求 WorkRequest 链接获取的相对路径附加基本端点。

wait_for_states

等待状态为以下类型的状态:DBMS_CLOUD_TYPES.wait_for_states_t。以下是预期状态的有效值:'ACTIVE','CANCELED','COMPLETED','DELETED','FAILED','SUCCEEDED'。

wait_for_states 允许有多个状态。wait_for_states 的默认值是等待任何预期状态:'ACTIVE','CANCELED','COMPLETED','DELETED','FAILED','SUCCEEDED'。

timeout

指定参数为 async_request_urlwait_for_states 的异步请求的超时(以秒为单位)。

默认值为 0。这表示在没有任何超时的情况下等待请求完成。

cache

如果 TRUE 指定请求,则应在 REST 结果 API 高速缓存中缓存请求。

默认值为 FALSE,这意味着不会缓存 REST API 请求。

cache_scope 指定是否每个人都可以访问此请求结果高速缓存。有效值:"PRIVATE""PUBLIC"。默认值为 "PRIVATE"
body PUTPOST 请求的 HTTP 请求正文。

异常错误

例外 错误 说明
invalid_req_method ORA-20023 传递到 DBMS_CLOUD.SEND_REQUEST 的请求方法无效。
invalid_req_header ORA-20024 传递到 DBMS_CLOUD.SEND_REQUEST 的请求标头的 JSON 格式无效。

使用说明

SET_API_RESULT_CACHE_SIZE 过程

此过程设置当前会话的最大高速缓存大小。高速缓存大小值仅适用于当前会话。

语法

DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE(
       cache_size          IN NUMBER);

参数

Parameter (参数) 说明
cache_size

将最大高速缓存大小设置为指定值 cache_size。如果新的最大高速缓存大小小于当前高速缓存大小,则会删除较早的记录,直到行数等于指定的最大高速缓存大小为止。最大值为 10000

如果高速缓存大小设置为 0,则会在会话中禁用高速缓存。

默认高速缓存大小为 10

异常错误

例外 错误 说明
invalid API result cache size ORA-20032 最小值为 0,最大值为 10000。当输入值小于 0 或大于 10000 时,将显示此异常错误。

范例

EXEC DBMS_CLOUD.SET_API_RESULT_CACHE_SIZE(101);

相关内容