|
|
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
Люди, может быть, кто-то уже сталкивался с такой проблемой. Требуется записать двоичную информацию из поля BLOB в файл средствами PL/SQL в Oracle 9. Написал вот это: f := UTL_FILE.FOPEN('h:\Temp', 'FileName.jpg', 'w', 32767); n := 1; amount := 10000; BEGIN LOOP DBMS_LOB.READ(vDoc.BLOB_Content, amount, n, buffer); UTL_FILE.PUT_RAW(f, buffer); n := n + amount; END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(f); END; По идее, все должно работать - тем более, что аналогичный пример я нашел на сайте ORACLE-BASE: http://www.oracle-base.com/Articles/9i/ExportBlob9i.asp А оно не работает - на строчке с PUT_RAW возникает ошибка записи в файл ORA-29285. При этом, если я пытаюсь записывать не двоичные данные, а символьные строки с помощью UTL_FILE.PUT - все проходит "на ура". То есть, судя по всему, дело именно в формате данных. Подскажите, что делать - полдня уже бьюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 14:08:29 |
|
||
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
You are exceeding the max record length (32767). RTFM: Код: plaintext 1. 2. 3. 4. 5. 6. Since you are using PUT_RAW without third parameter, you are not flushing and therefore LOB pieces you write are accumulating in UTL_FILE buffer. Eventually you exceed 32767. SY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 15:05:10 |
|
||
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
Да нет, я уже пробовал вот так: UTL_FILE.PUT_RAW(f, buffer, TRUE); и даже вот так: UTL_FILE.PUT_RAW(f, buffer); UTL_FILE.FFLUSH(f); Не помогает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 16:24:53 |
|
||
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
Let me take it back. UTL_FILE still is a package to read and write operating system text files. So main restriction is still there: file is a stream file with NEW_LINE serving as record (line) separator. Max record size is whatever specified in FOPEN as parameter max_linesize and can not exceed 32767 (including new line). Below is an example: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. When total size does not exceed 32K, it works fine, but as soon as it exceeds 32K: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. It errors out. And when we add NEW_LINE after third PUT_RAW, we are OK again (however it is not what you are looking for since you are, as far as I see, creating a JPG which is a binary file and NEW_LINE will mess it up): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. As you can see, the best you can do is to create a JPG no longer than 32K. Otherwise you could use BFILEs. SY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 17:54:17 |
|
||
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
данные, на жабе. Я когда столкнулся с этой проблемой стал выгружать код символа - т.е. выгружаю просто текст, а уже на кленте собираю с помощью внешней програмки в двоичный - все работает, хотя и немного тормозной способ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 10:39:30 |
|
||
|
Сохранение содержимого BLOB в двоичный файл
|
|||
|---|---|---|---|
|
#18+
Так проблема-то в том, что у меня нет клиента - вернее, в роли клиента выступает броузер. Я пишу на PL/SQL WEB-приложение. Пользователь может, заполняя форму, прицепить к ней свой файл. Содержимое этого файла будет сохранено в BLOB-поле. Дальше, мне нужно прикрепить этот файл к отправляемому письму. А вот как это сделать, не сохраняя этот файл на диске - ума не приложу. И сохранить вот тоже не получается. Может быть, кто-то находил уже выход из такого положения, чтобы мне велосипед-то не изобретать. А где найти этот пример на Java? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 11:18:00 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32182266&tid=1990013]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
246ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 575ms |

| 0 / 0 |
