在 PL/SQL 包中使用 Oracle 构造函数

Use Oracle constructor function in PL/SQL package

在 oracle ADB 上(认为是 19C)我有这个工作 SQL 函数来重命名对象存储文件:

declare
      namespace_name VARCHAR2(30) := 'XX';
      bucket_name varchar2(100) := 'XX';
      region VARCHAR2(30) := 'eu-frankfurt-1';
      cred VARCHAR2(30) := 'OCIDI_CRED';
      rename_values dbms_cloud_oci_object_storage_rename_object_details_t;
      result dbms_cloud_oci_obs_object_storage_rename_object_response_t;
    begin
      -- set the object name and rename values
      rename_values := dbms_cloud_oci_object_storage_rename_object_details_t(source_name                 => '1.txt',
                                                                             new_name                    => '2.txt', -- CSV_Manual/1.txt for example to put in folder
                                                                             src_obj_if_match_e_tag      => NULL,
                                                                             new_obj_if_match_e_tag      => NULL,
                                                                             new_obj_if_none_match_e_tag => NULL);
            

      -- Execute the task and get a status code and the task run key
      result := dbms_cloud_oci_obs_object_storage.rename_object(namespace_name        => namespace_name,
                                                bucket_name           => bucket_name,
                                                rename_object_details => rename_values,
                                                opc_client_request_id => NULL,
                                                region                => region,
                                                endpoint              => NULL,
                                                credential_name       => cred);
                
  dbms_output.put_line('status code: ' || result.status_code);
    end;

它正在使用一些已播种的 oracle 类型,它是构造函数类型: dbms_cloud_oci_object_storage_rename_object_details_t; dbms_cloud_oci_obs_object_storage_rename_object_response_t;

如何在 plsql 包中将此代码正确转换为 运行? 关于如何以及在何处声明它们存在问题

谢谢

您只需要用包语法包装 PL/SQL 块吗?

create or replace package cloud_storage is
      procedure rename_files;
end;
/

create or replace package body cloud_storage is
procedure rename_files is
      namespace_name VARCHAR2(30) := 'XX';
      bucket_name varchar2(100) := 'XX';
      region VARCHAR2(30) := 'eu-frankfurt-1';
      cred VARCHAR2(30) := 'OCIDI_CRED';
      rename_values dbms_cloud_oci_object_storage_rename_object_details_t;
      result dbms_cloud_oci_obs_object_storage_rename_object_response_t;
begin
      -- set the object name and rename values
      rename_values := dbms_cloud_oci_object_storage_rename_object_details_t(source_name                 => '1.txt',
                                                                             new_name                    => '2.txt', -- CSV_Manual/1.txt for example to put in folder
                                                                             src_obj_if_match_e_tag      => NULL,
                                                                             new_obj_if_match_e_tag      => NULL,
                                                                             new_obj_if_none_match_e_tag => NULL);
            

      -- Execute the task and get a status code and the task run key
      result := dbms_cloud_oci_obs_object_storage.rename_object(namespace_name        => namespace_name,
                                                bucket_name           => bucket_name,
                                                rename_object_details => rename_values,
                                                opc_client_request_id => NULL,
                                                region                => region,
                                                endpoint              => NULL,
                                                credential_name       => cred);
                
      dbms_output.put_line('status code: ' || result.status_code);
end;
end;
/

然后你可以调用包和过程:

begin
      cloud_storage.rename_files;
end;
/