| Пакет для работы с файлами на сервере |
Oracle filesPLSQL Пакет для работы с файловой системой на сервере , копирование файлов , перемещение , переименование и тд и тп.>>Скачать в формате ZIPCREATE 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 BEGINSELECT DBMS_UTILITY.PORT_STRING INTO vr_osstring FROM dual; IF INSTR(UPPER(vr_osstring), 'WIN') <> 0 THEN vr_returnvalue := '\'; ELSE vr_returnvalue := '/';END IF; EXCEPTIONWHEN 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 ISvr_returnvalue VARCHAR2(255); BEGIN BEGIN vr_returnvalue := SUBSTR(p_FileName, 1, INSTR(p_FileName,gv_OSseparator)); EXCEPTIONWHEN 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 ISvr_returnvalue VARCHAR2(255); BEGIN BEGIN vr_returnvalue := SUBSTR(p_FileName, 1, INSTR(p_FileName,gv_OSseparator,-1)); EXCEPTIONWHEN 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 ISvr_returnvalue VARCHAR2(255); BEGIN BEGIN vr_returnvalue := SUBSTR(p_FileName, INSTR(p_FileName,cv_extseparator,-1)); EXCEPTIONWHEN 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 ); EXCEPTIONWHEN 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; EXCEPTIONWHEN 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) ); EXCEPTIONWHEN 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 ); EXCEPTIONWHEN 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 ); EXCEPTIONWHEN 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) ); EXCEPTIONWHEN 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) ISvr_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 THENRAISE_APPLICATION_ERROR('pr_SetJavaGrand '||SQLERRM,0); -- потом исправить END; END pr_SetJavaGrand; BEGINPkg_Fileutil.gv_OSseparator := fn_GetOSSeparator; END Pkg_Fileutil ;/
|