CftClub.ru
Клуб специалистов ЦФТ-Банк

Копирование файла с именем файла более 128 символов

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Дек 28, 2023 16:57   Копирование файла с именем файла более 128 символов Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток!
Пишу операцию, которая генерирует XML-файл для внешней системы. Всё почти сделано, проблема осталась только в копировании сформированного файла с сервера в папку локального компьютера. Имя файла состоит из 146 символов (включая расширение). Копирую дистрибутивной операцией:
Код:
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[SRC_NAME]      := p_file_name||'.xml';
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[SRC_PATH]      := v_system_path;
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[SRC_TYPE]      := true;     
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[SRC_DELETE]   := true;   -- Потом удалить
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[DST_NAME]      := p_file_name||'.xml';
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[DST_PATH]      := p_path;
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[DST_TYPE]      := false;
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[DST_DELETE]   := false;      
      stdio.put_line_buf('<% CALL DOCUMENT COPYFILES '||nvl(::[SYSTEM]%id, 1)||' %>');


в результате вылетает ошибка:
В настоящий момент операция невозможна:
PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения


Ругается как раз на строку
Код:
      ::[DOCUMENT].[COPYFILES].tbl_F$L(p_file_idx).[SRC_NAME]      := p_file_name||'.xml';


потому что SRC_NAME имеет тип varchar2(128).

Укоротить имя файла не могу, так как это требование внешней системы. Все операции которые перекидывают файлы с сервера на компьютер в итоге используют всё ту же дистрибутивную операцию ::[DOCUMENT].[COPYFILES]. Пробовал скопировать дистрибутив и поменять в ней тип, так эта операция перестаёт работать.

Может кто знает, есть ли возможность копирования файла с сервера на локальный компьютер?[/code]
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Дек 29, 2023 09:08    Ответить с цитатой
Полезность: Нет оценки
А в клиент-скрипте переименовать файл?
Guest_SPb
Участник со стажем


Вступление в Клуб: 27.02.2014
СообщениеПт Дек 29, 2023 10:19    Ответить с цитатой
Полезность: 1
Можно заархивировать (например, в ZIP) файл на сервере так, чтобы имя архива было короче, и переносить на клиента уже этот файл-архив и там распаковывать.
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеПт Дек 29, 2023 11:44   Re: Копирование файла с именем файла более 128 символов Ответить с цитатой
Полезность: Нет оценки
Ну, собственно, уже два совета есть!
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеПт Дек 29, 2023 12:51    Ответить с цитатой
Полезность: Нет оценки
Guest_SPb пишет:
Можно заархивировать (например, в ZIP) файл на сервере так, чтобы имя архива было короче, и переносить на клиента уже этот файл-архив и там распаковывать.

Хм... Спасибо! В эту сторону не подумал. Спрошу бизнес подойдёт ли им такое решение.
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеПт Дек 29, 2023 12:52    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
А в клиент-скрипте переименовать файл?

Можно пример? Буду очень признателен!
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеВт Янв 09, 2024 10:21    Ответить с цитатой
Полезность: 1
смотри CRS_UPLOAD_KVIT

Код:

sub move_file(filename, dir_src, dir_dst)
   on error resume next
   if fso.FileExists(dir_dst & filename) then
      fso.DeleteFile dir_dst & filename, true
   end if
   err.clear
   fso.MoveFile dir_src & filename, dir_dst & filename
   if err.number <> 0 then
      exit sub
   end if
end sub
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Янв 09, 2024 10:24    Ответить с цитатой
Полезность: 2
widla пишет:
Volod пишет:
А в клиент-скрипте переименовать файл?

Можно пример? Буду очень признателен!

Что-нибудь типа такого:
Код:

sub RenameFile(p_file, p_to)
   Set fs = CreateObject("Scripting.FileSystemObject")

   if not fs.FileExists(p_file)) then
      MsgBox("Файл " & p_file & " не существует на локальной машине")
      Exit Sub
   end if

   fs.MoveFile p_file, p_to
end sub

Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru