|
Программирование >> Oracle
1408 Глава 20 Блок обработки исключительных ситуаций создан для перехвата и повторного во буждения исключительных ситуаций UTL FILE более удобным образом, чем это делает пакет UTL FILE. Вместо получения в вызывающей подпрограмме обычного сообщения об ошибке (SQLERRM) USER DEFINED EXCEPTION, мы получим нечто более осмысленное, вроде: Недопустим1й режим откр1тия файла. Кроме того, для испытательной ситуации INVALID PATH, которая возбуждается в том случае, когда фа нельзя открыть из-за неверного имени файла или каталога, выполняются дополнительные проверки, и причина ошибки устанавливается более точно. Если владелец этого типа имеет привилегию SELECT на представление SYS.V $PARAMETER, мы выбираем из него значение параметра инициализации UTL FILE DIR и проверяем, можно ли использовать тот каталог, который мы пытаемся использовать. Если нельзя, выдается соответствующее сообщение. Из всех ошибок, происходящих в процессе работы с пакетом UTL FILE, эта, несомненно, самая популярная . Выдавая такое точное сообщение об ошибке, мы сэкономим многие часы отладки для начинающих пользователей пакета UTL FILE. Продолжая рассмотрение, переходим к методу Open: 55 member function isOpen return boolean 56 is 57 begin 58 return utl file.is open(filetype pkg.g files(g file hdl)); 59 end; Это просто оболочка для существующей функции UTL FILE.IS OPEN. Поскольку эта функция пакета UTLFILE никогда не возбуждает исключительных ситуаций, ее реализация очень проста. Далее идет более сложный метод GET LINE: 61 member function get line return varchar2 62 is 63 l buffervarchar2(32765); 64 begin 65 utlfile.getline(filetypepkg.gfiles(gfile hdl), lbuffer); 66 return lbuffer; 67 exception 68 when utl file.invalid filehandle then 69 raiseapplicationerror 70 (-20002,fileType pkg.g invalid filehandle msg); 71 when utl file.invalid operation then 72 raise application error 73 (-20003,fileType pkg.g invalid operation msg); 74 when utl file.read error then 75 raise application error 76 (-20004,fileType pkg.g read error msg); 77 when utl file.internal error then 78 raise application error 79 (-2 00 06,fileType pkg.g internal error msg); 80 end; В нем используется локальная переменная типа VARCHAR2(32765), - переменная максимально возможного в PL/SQL размера и одновременно самая длинная строка, Использование объектно-реляционных средств 1409 которую фактически позволяет прочитать пакет UTL FILE. Как и в представленном ранее методе OPEN, мы перехватываем и обрабатываем исключительные ситуации, которые возбуждаются подпрограммой UTL FILE.GET LINE, и преобразуем их в вызовы RAISE APPLICATION ERROR. Это позволяет выдавать информативные сообщения об ошибках в функции GET LINE (для удобства использования GET LINE реализована как функция, а не как процедура). Теперь переходим к другой статической процедуре - WRITE IO. Процедура WRITE IO используется единственно для того, чтобы избежать написания одних и тех же обработчиков исключительных ситуаций шесть раз, для каждой из подпрограмм, связанных с записью, поскольку все они возбуждают одни и те же исключительные ситуации. Эта функция, добавленная исключительно для удобства программирования, просто вызывает одну из шести функций пакета UTL FILE и обрабатывает все возможные ошибки: 82 static procedure write io(p file in number, 83 p operation in varchar2, 84 p parml in varchar2 default null, 85 p parm2 in varchar2 default null, 86 p parm3 in varchar2 default null, 87 p parm4 in varchar2 default null, 88 p parm5 in varchar2 default null, 89 p parm6 in varchar2 default null) 90 is 91 l file utl file.file type default filetype pkg.g files(p file); 92 begin 93 if (p operation=close) then 94 utl file.fclose(l file); 95 elsif (p operation=put) then 96 utl file.put(l file,p parml) ; 97 elsif (p operation=new line) then 98 utl file.new line(l file,p parm1); 99 elsif (p operation=put line) then 100 utl file.put line(l file, p parml); 101 elsif (p operation=flush) then 102 utl file.fflush(l file); 103 elsif (p operation=putf) then 104 utl file.putf(l file,p parml, p parm2 , 105 p parm3 , p parm4 , p parm5 , 106 p parm6); 107 else raise program error; 108 end if; 109 exception 110 when utl file.invalid filehandle then 111 raise application error 112 (-20002,fileType pkg.g invalid filehandle msg); 113 when utl file.invalid operation then 114 raise application error 115 (-20003,fileType pkg.g invalid operation msg); 116 when utl file.write error then 1410 Глава 20 117 118 119 120 121 raise application error (-2 0005,fileType pkg.g write error msg); when utl file.internal error then raise application error (-2 0006,fileType pkg.g internal error msg); end; Остальные методы вызывают метод WRITE IO с соответствующими параметрами: 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 member procedure close is begin fileType.write io(g file hdl, close) ; filetype pkg.g files.delete(g file hdl); end; member procedure put(p text in varchar2) is begin fileType.write io(g file hdL, end; member procedure new line(p lines is begin fileType.write io(g file hdl, end; put,p text); in number default 1) new line,p lines); member procedure put line(p text in varchar2) is begin fileType.write io(g file hd1, end; put line, p text); member procedure putf (p fmt in varchar2, p argl in varchar2 default null, p arg2 in varchar2 default null, p arg3 in varchar2 default null, p arg4 in varchar2 default null, p arg5 in varchar2 default null) is begin fileType.write io (g file hd1, putf, p fmt, p argl, p arg2, p arg3, p arg4, p arg5) ; end; member procedure flush is begin fileType.write io(g file hdl, flush); end; end;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |