You need to enable JavaScript to run this app. Oracle 19c ADB下如何将对象存储重命名逻辑正确封装为PL/SQL包
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c ADB下如何将对象存储重命名逻辑正确封装为PL/SQL包

ADB 19c 对象存储重命名逻辑PL/SQL包规范实现

ADB环境中所有dbms_cloud_oci_开头的系统包、预定义对象类型均为SYS schema公开授权对象,普通业务用户可直接调用,无需自行定义、重建类型。原匿名块的逻辑可直接封装为可复用的PL/SQL包,系统预定义类型的声明位置和匿名块保持一致,无需额外调整。

1. 定义PL/SQL包规范

把固定环境配置抽为包常量,对外暴露标准化的重命名接口,代码如下:

CREATE OR REPLACE PACKAGE os_object_rename_pkg
AS
  -- 环境固定配置,可根据实际部署值修改
  c_namespace_name  VARCHAR2(30)  := 'XX';
  c_bucket_name     VARCHAR2(100) := 'XX';
  c_region          VARCHAR2(30)  := 'eu-frankfurt-1';
  c_cred_name       VARCHAR2(30)  := 'OCIDI_CRED';

  -- 对外重命名接口
  PROCEDURE rename_oss_object(
    p_source_object_name  IN  VARCHAR2,
    p_new_object_name     IN  VARCHAR2,
    p_out_status_code     OUT NUMBER
  );
END os_object_rename_pkg;
/

2. 实现包体逻辑

系统预定义类型作为过程的本地变量声明,和原匿名块的语法完全一致,代码如下:

CREATE OR REPLACE PACKAGE BODY os_object_rename_pkg
AS
  PROCEDURE rename_oss_object(
    p_source_object_name  IN  VARCHAR2,
    p_new_object_name     IN  VARCHAR2,
    p_out_status_code     OUT NUMBER
  )
  IS
    -- 直接引用系统全局预定义类型,无需自定义声明
    l_rename_details  dbms_cloud_oci_object_storage_rename_object_details_t;
    l_rename_result  dbms_cloud_oci_obs_object_storage_rename_object_response_t;
  BEGIN
    -- 初始化重命名请求参数
    l_rename_details := dbms_cloud_oci_object_storage_rename_object_details_t(
      source_name                 => p_source_object_name,
      new_name                    => p_new_object_name,
      src_obj_if_match_e_tag      => NULL,
      new_obj_if_match_e_tag      => NULL,
      new_obj_if_none_match_e_tag => NULL
    );

    -- 调用系统内置对象存储重命名接口
    l_rename_result := dbms_cloud_oci_obs_object_storage.rename_object(
      namespace_name        => c_namespace_name,
      bucket_name           => c_bucket_name,
      rename_object_details => l_rename_details,
      opc_client_request_id => NULL,
      region                => c_region,
      endpoint              => NULL,
      credential_name       => c_cred_name
    );

    -- 返回执行状态码
    p_out_status_code := l_rename_result.status_code;
    DBMS_OUTPUT.PUT_LINE('重命名执行状态码: ' || l_rename_result.status_code);
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('重命名执行失败: ' || SQLERRM);
      RAISE;
  END rename_oss_object;
END os_object_rename_pkg;
/

3. 包的调用示例

封装完成后可直接在PL/SQL块中调用,无需关注底层系统类型的实现逻辑:

DECLARE
  v_status_code NUMBER;
BEGIN
  os_object_rename_pkg.rename_oss_object(
    p_source_object_name  => '1.txt',
    p_new_object_name     => 'CSV_Manual/1.txt', -- 支持带虚拟路径前缀实现对象移动
    p_out_status_code     => v_status_code
  );
END;
/

注意事项

  • 无需在包内重新定义两个系统预定义类型,这些类型是ADB内置的全局公开对象,直接引用即可识别
  • 若执行时报权限错误,需确认当前业务用户是否拥有DBMS_CLOUD_OCI相关包的EXECUTE权限,以及对应OCI凭证OCIDI_CRED的使用权限
  • 类型的参数赋值、接口调用逻辑和原匿名块完全一致,不会因为封装为包产生语法变更

内容的提问来源于stack exchange,提问作者DBetlGET

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 18:15:04