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

Как заархивировать *.DBF файл и отправить его через e-mail
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
lioness
Участник


Вступление в Клуб: 05.08.2011
СообщениеПт Авг 05, 2011 14:51   Как заархивировать *.DBF файл и отправить его через e-mail Ответить с цитатой
Полезность: Нет оценки
Добрый день. Нужно создать DBF файл , который должен быть отправлен через ИБСО на некий электронный адрес в формате .zip(arj)
Заранее спасибо.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Авг 05, 2011 15:43   Re: Как заархивировать *.DBF файл и отправить его через e-ma Ответить с цитатой
Полезность: Нет оценки
lioness пишет:
Добрый день. Нужно создать DBF файл , который должен быть отправлен через ИБСО на некий электронный адрес в формате .zip(arj)
Заранее спасибо.

В пакете STDIO есть функция ZIP. как с ней работать можно наверное в коде системы поискать. Я нашел только это:
Код:

       ....
        -- зазиповываем
   
   v_file_name := '0' || to_char(sysdate, 'HH24MISS') || '.zip';
   if stdio.zip(v_post_path || v_DS || 'tounix' || v_DS || v_file_name, v_path || '/*.*') = 0 then
      -- проверяем наличие файла-ярлыка, содержащего имя zip-файла, если нет, то создаем его
      if [RCLI_47]::[POST].File(v_post_path || v_DS || 'tounix' || v_DS || v_HeadBank_PB_NUM || '.x') then
         -- открываем для записи в конец файла
         v_file_1 := stdio.open(v_post_path || v_DS || 'tounix', v_HeadBank_PB_NUM || '.x', 'a');
         stdio.put_line(v_file_1, v_file_name, true, null, stdio.DOSTEXT);
         -- закрываем файл
         stdio.close(v_file_1);
      else
         -- создаем файл-ярлык
         v_file_1 := stdio.open(v_post_path || v_DS || 'tounix', v_HeadBank_PB_NUM || '.x', 'w');
         -- записываем строку с именем файла
         stdio.put_line(v_file_1, v_file_name, true, null, stdio.DOSTEXT);
         -- закрываем файл
         stdio.close(v_file_1);
      --end if;
      
      -- создаем файл-флаг
      -- формируем имя файла
      v_file_name := 'x' || v_HeadBank_PB_NUM || '.f';
      -- путь к формируемым на сервере файлам
      v_path := v_post_path || v_DS || 'flags';
      -- флаг
      v_file_1 := stdio.open(v_path, v_file_name, 'w');
      -- закрываем файл
      stdio.close(v_file_1);
   else
      pragma error('Ошибка при архивировании файлов');
   end if;
        .....
       

В доке написано следующее:
Цитата:
function ZIP (arcname in string, dirname in string) return integer;
выполняет ZIP команду, возвращает >= 0 в случае успеха, иначе код ошибки < 0,
arcname, dirname - параметры команды..


ну а далее, я так понимаю скормить файл библиотеки работы с почтой и все.
_________________
всегда есть как минимум 2 выхода
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Авг 15, 2011 14:31    Ответить с цитатой
Полезность: 1
архивация:

запускаем арм "Администратор доступа"
В нем Системные справочники->Профили
В выпадающем списке выбираем DEFAULT
В табличке ищем что-то со значением zip или pkzip
если нету, создаем новый, например, такой

Имя: FIO_ZIP_CMD
Значение: /usr/bin/zip -j % %

вместо параметра (имени файла) вставляем %, каждый % - это новый параметр
Название должно быть в виде FIO_<команда>_CMD

Далее вызов из pl/plus-кода такой:
Код:
declare
   v$err number;
   v$file   varchar2(32767); -- файл .dbf
   v$arch   varchar2(32767); -- файл .zip
begin
   v$err := stdio.run('FIO_ZIP_CMD', v$arch, v$file);
   if v$err < 0 then
      dbms_output.put_line(stdio.error_message(v$err));
   end if;
end;


А по почте можно пересылать используя runtime.smtp_mail
lioness
Участник


Вступление в Клуб: 05.08.2011
СообщениеВт Авг 16, 2011 14:07    Ответить с цитатой
Полезность: Нет оценки
Ребята спасибо за ответ.
Но , мне наш администратор сказал , что так как Оракл развернут на линексе , данные функции не прокатят. То есть ед. вариант писать свой пакет для линекса.
Я просто совсем не знаю Линекс Sad
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Авг 16, 2011 14:56    Ответить с цитатой
Полезность: Нет оценки
lioness пишет:
Ребята спасибо за ответ.
Но , мне наш администратор сказал , что так как Оракл развернут на линексе , данные функции не прокатят. То есть ед. вариант писать свой пакет для линекса.
Я просто совсем не знаю Линекс Sad

Странно.. на мой взгляд пакеты Оракл должны работать на любой ОС. хотя может есть какие либо нюансы в работе с файловой системой..
Хотя при нормально настроеном FIO довелось поработать и с AIX и с Linux и с HP-UX и Windows Server (от 2003 R2 до 2008).. особых проблем не наблюдалось.
_________________
всегда есть как минимум 2 выхода
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Авг 16, 2011 16:14    Ответить с цитатой
Полезность: Нет оценки
>Я просто совсем не знаю Линекс

Линекс — лекарственный препарат из группы пробиотиков, используемых для лечения дисбактериоза кишечника. (С) Википедия
Ghost
Профи


Вступление в Клуб: 24.11.2007
СообщениеВт Авг 16, 2011 17:08    Ответить с цитатой
Полезность: Нет оценки
lioness пишет:
Ребята спасибо за ответ.
Но , мне наш администратор сказал , что так как Оракл развернут на линексе , данные функции не прокатят. То есть ед. вариант писать свой пакет для линекса.
Я просто совсем не знаю Линекс Sad

Laughing Да там и знать нечего, действуйте по инструкции http://linex.su/32/
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Авг 17, 2011 06:37    Ответить с цитатой
Полезность: Нет оценки
lioness пишет:
Ребята спасибо за ответ.
Но , мне наш администратор сказал , что так как Оракл развернут на линексе , данные функции не прокатят. То есть ед. вариант писать свой пакет для линекса.
Я просто совсем не знаю Линекс Sad


Да-да. У всех катят, у него не катят. У меня даже на винде все работает.

В Администраторе доступа есть команда FIO_CHMOD_CMD? Значит, все прокатит. Нужно сделать по аналогии.

Единственный вариант - знать больше администратора и находить общий язык - установить архиватор zip по указанному пути, дать тебе адрес и порт smtp-сервера и т.п.

Поговори с администратором, пусть создаст для тебя пользователя, с которым ты сможешь поиграться на сервере, пусть не на боевом.

Найди в указанном /usr/bin или /usr/local/bin файл zip и поэкспериментируй с ним.

stdio.run предназначен как раз для запуска Shell-овских команд/ исполняемых файлов.
lioness
Участник


Вступление в Клуб: 05.08.2011
СообщениеСр Авг 17, 2011 08:47    Ответить с цитатой
Полезность: Нет оценки
Прокатило , после "нажатия" на администратора нашего и привлечение сторонних лиц..Спасибо всем за помощьSmile))
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Июл 16, 2014 03:07    Ответить с цитатой
Полезность: Нет оценки
Здравствуйте.
понимаю, что тема уже старая, но возникла необходимость архивировать файл на серваке и у меня.
Автор темы не выложил решения, что меня огорчает, поэтому прошу помочь мне с описанием того, что написал Random.

Я проверил в профиле дефолтном эту настройку FIO_ZIP_CMD.
Нашел пример подобной операции дистрибутивной на схеме. и пробую вот что:

закинул в корень диска файл test_00.txt
и запускаю скриптец (пишу пока на pl/sql, чтобы не тупить с операцией)



Код:

declare
    i integer;
    x varchar2(2000):='';
    err integer;
begin
    i := ibs.rtl.open;
    DBMS_OUTPUT.ENABLE;
    x:=x||ibs.Z$SYSTEM_PARAMS_GET.GET_EXECUTE(NULL,'SYSTEM_PARAMS','PATH',null);
    err := ibs.stdio.run('FIO_ZIP_CMD','test_00.txt',x||' -m');
    DBMS_OUTPUT.PUT_LINE('*'||x||'*'||err||'*');
end;


архив, с таким именем (как 2ой параметр) на сервере не создается. в чем подвох? пожалуйста помогите.
в err передается 768
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеСр Июл 16, 2014 05:15    Ответить с цитатой
Полезность: Нет оценки
Запускаю поиск по словарю слова FIO_ZIP_CMD.

1 параметр путь с названием архива
2 параметр путь с названием файла
+
путь должент быть не точка '.' а браться из 'FIO_HOME_DIR'
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Июл 16, 2014 06:06    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
Запускаю поиск по словарю слова FIO_ZIP_CMD.

1 параметр путь с названием архива
2 параметр путь с названием файла
+
путь должент быть не точка '.' а браться из 'FIO_HOME_DIR'


я собственно говоря взял пример из дистрибутива.

мне не очень понятно, я должен архив создать, чтобы в него засунуть файл чтоли? в чем тогда смысл архивации?

а FIO_HOME_DIR - это, из доки не путь, а "Префикс имен каталогов настроек FIO (FIO_ROOT_DIR, FIO_BASE_DIR)."
к сожалению мне теперь вообще не понятно что это ))
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеСр Июл 16, 2014 06:36    Ответить с цитатой
Полезность: Нет оценки
Ещё можно использовать ::[RUNTIME].[ZIP], эта библиотека позволяет работать с ZIP-архивами средствами Oracle и PL+, а не средствами ОС. Пример использования можно посмотреть в ::[OOXML].[XL].
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Июл 16, 2014 07:42    Ответить с цитатой
Полезность: Нет оценки
Amper пишет:
Ещё можно использовать ::[RUNTIME].[ZIP], эта библиотека позволяет работать с ZIP-архивами средствами Oracle и PL+, а не средствами ОС. Пример использования можно посмотреть в ::[OOXML].[XL].


да я смотрел ее уже. Она использует то, что я как раз и написал.

Собственно, сейчас у меня полный ступор:
в профиле дефолта настройка FIO_ZIP_CMD имеет значение /usr/bin/zip -j % %
настройка FIO_HOME_DIR имеет значение /u/tools/fio

Т.е. если следовать совету Alkov'а, то я должен написать что-то типа:

Код:

declare
    i integer;
    err integer;
begin
    i := ibs.rtl.open;
    DBMS_OUTPUT.ENABLE;
    err := ibs.stdio.run('FIO_ZIP_CMD'
                        ,'.\test_arch' --этого файла на серваке нет (это ж типа архив)
                        ,'.\test_00.txt' --этот файл на серваке есть
                        );
    DBMS_OUTPUT.PUT_LINE('*'||err||'*');
end;



однако, результат в таком виде = *3072*, и архив не создался.
вопрос - почему? что я не так написал?
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеСр Июл 16, 2014 07:47    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
да я смотрел ее уже. Она использует то, что я как раз и написал.

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

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