Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
Всем доброго дня. Недавно начал осваивать сетевые протоколы в Оракле, с помощью UTL_TCP. При работе с FTP столкнулся с проблемой, При заливке файла на сервер все проходит хорошо, но при считывании файл скачивается не до конца. Может кто то сталкивался с такой проблемой? Вот примерный код: declare ........ aconn utl_tcp.connection; pconn utl_tcp.connection; p_list cm_ftp.t_string_table; l_amount PLS_INTEGER; l_buffer VARCHAR2(32767); BEGIN ServerName :='11.111.111.1'; ServerPort :=21; UserName :='user'; Passwrd :='12345'; ServerFolder :='/iout'; BEGIN aconn := cm_ftp.login(ServerName, ServerPort, UserName, Passwrd); EXCEPTION WHEN OTHERS THEN Cl_Log:=Cl_Log||SQLERRM||';'; ROLLBACK; RETURN; END; BEGIN cm_ftp.nlst(aconn, ServerFolder, p_list); EXCEPTION WHEN OTHERS THEN Cl_Log:=Cl_Log||SQLERRM||';'; cm_ftp.logout(aconn); ROLLBACK; RETURN ; END; IF (p_list.COUNT > 0) THEN FOR i IN p_list.FIRST..p_list.LAST LOOP l_s_FileNameFtp:=TRIM(SUBSTR(p_list(i),-1*(length(p_list(i))-instr(p_list(i),' ',-1)))); if ((l_s_FileNameFtp <> '.') AND (l_s_FileNameFtp <> '..')) THEN DBMS_OUTPUT.PUT_LINE(i||'='||l_s_FileNameFtp); DBMS_LOB.createtemporary (lob_loc => c_result, cache => TRUE, dur => DBMS_LOB.call); pconn := cm_ftp.get_passive(aconn); l_result := UTL_TCP.write_line(aconn, 'RETR ' || ServerFolder||'/'||l_s_FileNameFtp); BEGIN LOOP l_amount := UTL_TCP.read_text (pconn, l_buffer, 1024); dbms_output.put_line(l_buffer); DBMS_LOB.writeappend(c_result, l_amount, l_buffer); END LOOP; EXCEPTION WHEN UTL_TCP.END_OF_INPUT THEN NULL; WHEN OTHERS THEN NULL; END; UTL_TCP.close_connection(pconn); END LOOP; END IF; END; |
15 сен 10, 09:39 [9440503] Ответить | Цитировать Сообщить модератору |
Сергей Арсеньев Member Откуда: Сообщений: 4118 |
|
||
15 сен 10, 09:43 [9440525] Ответить | Цитировать Сообщить модератору |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
Я так думаю что данный эксепшн должен сработать когда файл полностью считается, и UTL_TCP.read_text вернет NULL. Или я не прав в случае UTL_TCP?? |
15 сен 10, 10:07 [9440716] Ответить | Цитировать Сообщить модератору |
Быдлокод
Guest |
|
||
15 сен 10, 10:18 [9440820] Ответить | Цитировать Сообщить модератору |
Вячеслав Любомудров Member Откуда: Владивосток Сообщений: 18511 |
И исключение рождается в dbms_output.put_line(l_buffer) по превышению размера внутреннего буфера или размера строки |
15 сен 10, 10:22 [9440848] Ответить | Цитировать Сообщить модератору |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
согласен, лишнее, но туда никогда не попадаем, убрал из кода. Непомогло |
||||
15 сен 10, 10:27 [9440894] Ответить | Цитировать Сообщить модератору |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
убрал, эффект тот же, считываем меньше, чем размер файла. |
||
15 сен 10, 10:32 [9440934] Ответить | Цитировать Сообщить модератору |
Cile
Guest |
Уверены что передаете текстовый файл? Почему бы не воспользоваться готовым решением ftp.pks, ftp.pkb. |
15 сен 10, 10:51 [9441110] Ответить | Цитировать Сообщить модератору |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
Cile, Да уверен, качаю xml с данными. )))) Вот как раз его я и использую, в частности функцию FUNCTION get_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection, p_file IN VARCHAR2) Просто всю начинку функции вытащил к себе в процедуру, для чистоты эксперимента |
15 сен 10, 11:05 [9441260] Ответить | Цитировать Сообщить модератору |
Basil A. Sidorov Member Откуда: Сообщений: 10859 |
|
||
15 сен 10, 16:19 [9444489] Ответить | Цитировать Сообщить модератору |
dMazay82 Member Откуда: Тверь Сообщений: 339 |
Basil A. Sidorov, Да с Винды на линукс |
15 сен 10, 17:18 [9445150] Ответить | Цитировать Сообщить модератору |
Basil A. Sidorov Member Откуда: Сообщений: 10859 |
CRLF -> LF |
||
15 сен 10, 18:53 [9445910] Ответить | Цитировать Сообщить модератору |
Андрей Панфилов Member Откуда: Москва > Melbourne Сообщений: 3802 |
dMazay82, ппц, используйте жаву, не имейте мозг ни себе ни окружающим |
15 сен 10, 20:25 [9446371] Ответить | Цитировать Сообщить модератору |
Все форумы / Oracle | ![]() |