Пакет для работы с файлами на сервере Печать E-mail
Рейтинг: / 5
ХудшаяЛучшая 

Oracle  files

PLSQL Пакет для работы с файловой системой на сервере , копирование файлов , перемещение , переименование и тд и тп.

>>Скачать в формате ZIP

CREATE OR REPLACE PACKAGE Pkg_Fileutil AS

/******************************************************************************

Наименование: pkg_fileutil

НАЗНАЧЕНИЕ:

функции , процедуры для работы с файлами и папками с помощью Oracle СУБД

 

СВЕДЕНИЯ:

Версия Создана Автор Описание

--------- ---------- --------------- ------------------------------------

1.0 24.12.2006 Чалышев М.М. 1. Работа с файлами в oracle СУБД

******************************************************************************/

-- процедуры и функции пакета

cv_extseparator CONSTANT VARCHAR2(1) := '.';

gv_OSseparator VARCHAR(1);

 

-- возвращает разделитель операционной системы

--- '\' для windows или '/' для unix систем

FUNCTION fn_GetOSSeparator RETURN VARCHAR2;

-- выделяет имя файла ,входной параметр полный путь к файлу,

-- пример: для 'c:\temp\file.log' вернет 'file.log'

FUNCTION fn_ExtractFileName(p_FileName IN VARCHAR2) RETURN VARCHAR2;

-- выделяет диск , входной параметр полный путь к файлу

-- пример: для 'c:\temp\file.log' вернет 'c:\'

FUNCTION fn_ExtractRootDisk(p_FileName IN VARCHAR2) RETURN VARCHAR2;

-- возвращает каталог , где расположен фа1л,

-- пример: 'c:\temp\file.log' вернет 'c:\temp\'

FUNCTION fn_ExtractFileDir(p_FileName IN VARCHAR2) RETURN VARCHAR2;

-- возвращает расширение фа1ла

-- пример: 'c:\temp\file.log' вернет '.log'

FUNCTION fn_ExtractFileExt(p_FileName IN VARCHAR2) RETURN VARCHAR2;

-- возвращает расширение фа1ла

-- пример: fn_ChangeFileExt('c:\temp\file.log' , '.bak') - вернет c:\temp\file.bak

FUNCTION fn_ChangeFileExt(p_FileName IN VARCHAR2, p_ext VARCHAR2) RETURN VARCHAR2;

 

-- возвращает расширение фа1ла

-- пример: fn_FileExists('c:\temp\file.log' ) - 1 или 0

FUNCTION fn_FileExists(p_FileName IN VARCHAR2) RETURN NUMBER;

 

-- копирует файл из одного каталога в другой

-- пример:

-- pr_FileCopy('c:\temp\file.log' , 'c:\oracle\file.log')

-- копирует file.log в каталог oracle

PROCEDURE pr_FileCopy(p_oldFileName IN VARCHAR2, p_newfilename VARCHAR2);

-- переименовывает некоторый файл

-- пример: pr_FileRename('c:\temp\file.log' , '.bak') - вернет c:\temp\file.bak

PROCEDURE pr_FileRename(p_oldFileName IN VARCHAR2, p_newfilename VARCHAR2);

-- копирует файл из одного каталога в другой

-- пример: pr_FileMove('c:\temp\file.log' , '.bak') - вернет c:\temp\file.bak

PROCEDURE pr_FileMove(p_OldFileName IN VARCHAR2, p_newfilename VARCHAR2);

-- копирует файл из одного каталога в другой

-- пример: pr_deleteFile('c:\temp\file.log') - удалит c:\temp\file.Log

PROCEDURE pr_FileDelete(p_FileName IN VARCHAR2);

 

-- копирует файл из одного каталога в другой

-- пример: pr_deleteFile('c:\temp\') - права для java для c:\temp\

PROCEDURE pr_SetJavaGrand(p_DirName VARCHAR2,p_UserName VARCHAR2); END Pkg_Fileutil;

/

 

CREATE OR REPLACE PACKAGE BODY Pkg_Fileutil AS /********************************************************************

Назначение:

находит разделитель файловой сисемы ОС на Oracle сервере

Параметры:

Зависимости:

Ограничения:

Пример:

fn_GetOSSeparator - результат '/' или '\'

Список исправлений:

*********************************************************************/

FUNCTION fn_GetOSSeparator RETURN VARCHAR2

IS

vr_osstring VARCHAR2(255) ;

vr_returnvalue VARCHAR2(1) ;

BEGIN

BEGIN

SELECT DBMS_UTILITY.PORT_STRING INTO vr_osstring FROM dual;

IF INSTR(UPPER(vr_osstring), 'WIN') <> 0 THEN

vr_returnvalue := '\';

ELSE vr_returnvalue := '/';

END IF;

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_GetOSSeparator '||SQLERRM ,0 );

vr_returnvalue := '';

END;

RETURN vr_returnvalue;

END fn_GetOSSeparator;

 

 

/********************************************************************

Назначение:

Возвращает имя файла из строки с указанием полныого пути к фа1йу

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_ExtractFileName('c:\temp\file.log') результат 'file.log'

Список исправлений:

*********************************************************************/

FUNCTION fn_ExtractFileName(p_FileName IN VARCHAR2) RETURN VARCHAR2

IS

vr_returnvalue VARCHAR2(255);

BEGIN

BEGIN

vr_returnvalue := SUBSTR(p_FileName, INSTR(p_FileName,gv_OSseparator,-1)+1);

RETURN vr_returnvalue;

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ExtractFileName '||SQLERRM ,0 ); END;

END fn_ExtractFileName;

 

/********************************************************************

Назначение:

Возвращает имя диска по полному пути к фа1лу

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_ExtractRootDisk('c:\temp\file.log') результат 'c:\'

Список исправлений:

*********************************************************************/

FUNCTION fn_ExtractRootDisk(p_FileName IN VARCHAR2) RETURN VARCHAR2

IS

vr_returnvalue VARCHAR2(255);

BEGIN

BEGIN

vr_returnvalue := SUBSTR(p_FileName, 1, INSTR(p_FileName,gv_OSseparator)); EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ExtractRootDisk '||SQLERRM ,0 );

END;

RETURN vr_returnvalue;

END fn_ExtractRootDisk;

 

/********************************************************************

Назначение:

Каталог файла по полному пути к фа1лу

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_ExtractRootDisk('c:\temp\file.log') результат 'c:\temp\'

Список исправлений:

*********************************************************************/

FUNCTION fn_ExtractFileDir(p_FileName IN VARCHAR2) RETURN VARCHAR2

IS

vr_returnvalue VARCHAR2(255);

BEGIN

BEGIN

vr_returnvalue := SUBSTR(p_FileName, 1, INSTR(p_FileName,gv_OSseparator,-1)); EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ExtractFileDir '||SQLERRM ,0 );

END;

RETURN vr_returnvalue;

END fn_ExtractFileDir;

 

/********************************************************************

Назначение:

Возвращает расширение файла по полному пути к фа1лу

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_ExtractFileExt('c:\temp\file.log') результат '.log'

Список исправлений:

*********************************************************************/

FUNCTION fn_ExtractFileExt(p_FileName IN VARCHAR2) RETURN VARCHAR2

IS

vr_returnvalue VARCHAR2(255);

BEGIN

BEGIN

vr_returnvalue := SUBSTR(p_FileName, INSTR(p_FileName,cv_extseparator,-1));

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ExtractFileExt '||SQLERRM ,0 );

END;

RETURN vr_returnvalue;

END fn_ExtractFileExt;

/********************************************************************

Назначение:

Возвращает расширение файла по полному пути к фа1лу

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_ExtractFileExt('c:\temp\file.log', '.bak') результат 'c:\temp\file.bak'

Список исправлений:

*********************************************************************/

FUNCTION fn_ChangeFileExt(p_FileName IN VARCHAR2, p_ext VARCHAR2) RETURN VARCHAR2

IS

vr_returnvalue VARCHAR2(255);

BEGIN

BEGIN

vr_returnvalue := REPLACE(p_FileName, fn_ExtractFileExt(p_FileName => p_FileName ),p_ext );

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ChangeFileExt '||SQLERRM ,0 );

END;

RETURN vr_returnvalue;

END fn_ChangeFileExt;

/********************************************************************

Назначение:

Возвращает данные о фактическом наличии файла

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

fn_FileExists('c:\temp\file.log' ) - 1 файл есть или 0 файла нет

Список исправлений:

*********************************************************************/

FUNCTION fn_FileExists(p_FileName IN VARCHAR2) RETURN NUMBER

IS

vr_returnvalue NUMBER;

vr_exists BOOLEAN;

vr_temp NUMBER;

BEGIN

BEGIN

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_DST_FL_UTL AS '||''''||UPPER(fn_extractfiledir(P_FileName))||'''';

vr_returnvalue := 0;

UTL_FILE.fcopy

(

'SYS_DST_FL_UTL'

, fn_extractfilename(P_FileName)

, 'SYS_DST_FL_UTL'

, fn_extractfilename(P_FileName)

);

vr_returnvalue := 1; EXCEPTION

WHEN OTHERS THEN vr_returnvalue := 0;

END;

RETURN vr_returnvalue;

END fn_FileExists;

 

/********************************************************************

Назначение:

Копирует файл из одного каталога в другой

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

-- pr_FileCopyt('c:\temp\file.log' , 'c:\oracle\file.log')

-- копирует file.log в каталог oracle

Список исправлений:

--

*********************************************************************/

PROCEDURE pr_FileCopy(p_oldFileName IN VARCHAR2, p_newfilename VARCHAR2)

IS

BEGIN

BEGIN

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_EXC_FL_UTL AS '||''''||UPPER(fn_extractfiledir(P_OldFileName))||'''';

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_DST_FL_UTL AS '||''''||UPPER(fn_extractfiledir(P_NewFileName))||'''';

UTL_FILE.fcopy

(

'SYS_EXC_FL_UTL'

, fn_extractfilename(P_OldFileName)

, 'SYS_DST_FL_UTL'

, fn_extractfilename(P_NewFileName)

);

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('pr_FileCopy '||SQLERRM ,0 );

END;

END pr_FileCopy;

 

/********************************************************************

Назначение:

Копирует файл из одного каталога в другой

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

-- pr_FileCopyt('c:\temp\file.log' , 'c:\oracle\file.log')

-- копирует file.log в каталог oracle

Список исправлений:

--

*********************************************************************/

PROCEDURE pr_FileRename(p_oldFileName IN VARCHAR2, p_newfilename VARCHAR2)

IS

BEGIN

BEGIN

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_DST_FL_UTL AS '||''''||fn_extractfiledir(P_NewFileName)||''''; UTL_FILE.frename

(

'SYS_EXC_FL_UTL'

, fn_extractfilename(P_OldFileName)

, 'SYS_EXC_FL_UTL'

, fn_extractfilename(P_NewFileName)

, TRUE

);

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ChangeFileExt '||SQLERRM ,0 );

END;

END pr_FileRename;

/********************************************************************

Назначение:

Копирует файл из одного каталога в другой

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

-- pr_FileCopyt('c:\temp\file.log' , 'c:\oracle\file.log')

-- копирует file.log в каталог oracle

Список исправлений:

--

*********************************************************************/

PROCEDURE pr_FileMove(p_oldFileName IN VARCHAR2, p_newfilename VARCHAR2)

IS

BEGIN

BEGIN

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_EXC_FL_UTL AS '||''''||fn_extractfiledir(P_OldFileName)||'''';

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_DST_FL_UTL AS '||''''||fn_extractfiledir(P_NewFileName)||'''';

UTL_FILE.frename

(

'SYS_EXC_FL_UTL'

, fn_extractfilename(P_OldFileName)

, 'SYS_DST_FL_UTL'

, fn_extractfilename(P_NewFileName)

, TRUE

);

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ChangeFileExt '||SQLERRM ,0 );

END;

END pr_FileMove;

 

/********************************************************************

Назначение:

Удляет файл из каталога

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

-- pr_FileDelete('c:\temp\file.log' )

-- удаляет file.log

Список исправлений:

--

*********************************************************************/

PROCEDURE pr_FileDelete(p_FileName IN VARCHAR2)

IS

BEGIN

BEGIN

EXECUTE IMMEDIATE ' CREATE OR REPLACE DIRECTORY SYS_EXC_FL_UTL AS '||''''||UPPER(fn_extractfiledir(P_FileName))||''''; UTL_FILE.fremove

(

'SYS_EXC_FL_UTL'

, fn_extractfilename(P_FileName)

);

EXCEPTION

WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_ChangeFileExt '||SQLERRM ,0 );

END;

END pr_FileDelete;

/********************************************************************

Назначение:

Распределяет права для java процедур

Параметры:

p_FileName - полный путь к файлу с указанием диска и каталогов

Зависимости:

Ограничения:

Пример:

-- pr_SetJavaGrand('c:\temp\' )

-- добавляет права для c:\temp\

Список исправлений:

--

*********************************************************************/

PROCEDURE pr_SetJavaGrand(p_DirName VARCHAR2,p_UserName VARCHAR2)

IS

vr_script VARCHAR2(2240);

BEGIN

BEGIN

-- SQLCODE

vr_script := 'begin dbms_java.grant_permission('||''''||UPPER(p_UserName)||''''

||' , '||''''||'java.io.FilePermission'||''''||' , '||''''||LOWER(p_DirName)||''''

||' , '||''''||'read'||''''||'); end;';

EXECUTE IMMEDIATE vr_script;

EXCEPTION

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR('pr_SetJavaGrand '||SQLERRM,0); -- потом исправить

END;

END pr_SetJavaGrand;

BEGIN

Pkg_Fileutil.gv_OSseparator := fn_GetOSSeparator;

END Pkg_Fileutil ;

/

 

 

Комментарии  

  1. #5 Oleg
    2011-10-1208:54:51 Привет!

    попробовал установить пэкедж из oranetwork.zip

    оказалось, что не объявлен тип ds_ip_type

    поправьте, пожалуйста.
  2. #4 Макс
    2011-09-0105:40:48 достаточно ассемблера и машинных кодов , но были разработаны языки программировани я высокого уровня
    так и этот пакет не подсеняет сосбой utl_file но делает работу с файлами в oracle более удобной и быстрой
  3. #3 Вася
    2011-07-2414:50:58 Стандартный пакет UTL_FILE вполне достаточно для работы с файлами
  4. #2 Макс
    2009-09-2519:36:15 определенно нужны
    но я предполагаю что все права уже есть в наличии
  5. #1 apolo
    2009-09-1807:35:49 Не помешает предварительные условия к работе пакета
    На сколько я помню, для работы с файловой системой ораклу нужны дополнительные права.

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Защитный код
Обновить

« Пред.