Используйте функцию конструктора Oracle в пакете PL/SQL

В 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;

Он использует некоторые типы оракула, которые были заполнены, и это тип функции конструктора: dbms_cloud_oci_object_storage_rename_object_details_t; dbms_cloud_oci_obs_object_storage_rename_object_response_t;

Как правильно преобразовать этот код для запуска в пакете plsql? возникли проблемы с тем, как и где их объявить

Спасибо


person DBetlGET    schedule 01.03.2021    source источник
comment
Что вы подразумеваете под «иметь проблему»? он возвращает ошибку?   -  person gsalem    schedule 01.03.2021
comment
Ошибки компиляции для ТЕЛА ПАКЕТА BI.CLOUD_STORAGE Ошибка: PLS-00201: необходимо объявить идентификатор 'DBMS_CLOUD_OCI_OBJECT_STORAGE_RENAME_OBJECT_DETAILS_T' Строка: 7 Текст: rename_values ​​dbms_cloud_oci_object_storage_rename_object_details_t; Ошибка: PL/SQL: Анализ модуля компиляции прекращен Строка: 1 Текст: создать или заменить тело пакета bi.cloud_storage is   -  person DBetlGET    schedule 02.03.2021


Ответы (1)


Вам просто нужно обернуть блок 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;
/
person Jon Heller    schedule 02.03.2021
comment
Проблема именно там. при создании пакета вы получаете: Ошибки компиляции для ТЕЛА ПАКЕТА BI.CLOUD_STORAGE Ошибка: PLS-00201: должен быть объявлен идентификатор 'DBMS_CLOUD_OCI_OBJECT_STORAGE_RENAME_OBJECT_DETAILS_T' Строка: 7 Текст: rename_values ​​dbms_cloud_oci_object_storage_rename_object_details_t; Ошибка: PL/SQL: Анализ модуля компиляции прекращен Строка: 1 Текст: создать или заменить тело пакета bi.cloud_storage is - person DBetlGET; 02.03.2021
comment
мне просто не хватало грантов. забыл, что - person DBetlGET; 02.03.2021