powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с блобом
8 сообщений из 8, страница 1 из 1
Проблема с блобом
    #37452807
Alexey Chasovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача. В blob закачивается файл (csv т.е. текстовый). Из него необходимо убрать переводы строк. Т.е. оставить только 0D+0A, и убрать одиночные 0A.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare
    varLob          BLOB;
    varLength       NUMBER;
    varAmount       NUMBER:= 1 ;
  BEGIN
    DBMS_LOB.createtemporary(varLob,false);
    DBMS_LOB.open(varLob,DBMS_LOB.LOB_READWRITE);
    execute immediate 'select blob_CONTENT from content_storage where name=:0' INTO varLob USING 'F12044/ДС-1.csv';
    -- select blob_CONTENT INTO varLob from content_storage where name='F12044/ДС-1.csv' FOR UPDATE;
    -- Необходимо убрать все 0А без 0D
    varLength:=nvl(DBMS_LOB.getlength(varLob), 0 );
    FOR c IN  2 ..varLength- 1 
    LOOP
      if UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.substr(varLob, 1 ,c))=CHR( 10 ) THEN
        IF UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.substr(varLob, 1 ,c- 1 ))!=CHR( 13 ) THEN
          DBMS_LOB.erase(varLob,varAmount,c);
        END IF;
      END IF;
    END LOOP;
    DBMS_LOB.close(varLob);
END;
если такой вариант то DBMS_LOB.erase вываливается в ошибку "[1]: (Error): ORA-22920: строка, содержащая значение LOB, не заблокирована ORA-06512: на "SYS.DBMS_LOB", line 481 ORA-06512: на line 16"

а если чтение переделать на такой вариант:
Код: plaintext
1.
2.
    -- execute immediate 'select blob_CONTENT from content_storage where name=:0' INTO varLob USING 'F12044/ДС-1.csv';
    select blob_CONTENT INTO varLob from content_storage where name='F12044/ДС-1.csv' FOR UPDATE;
то все проходит но в ошибку вываливается закрытие блоба "[1]: (Error): ORA-22289: невозможно выполнить операцию для закрытого файла или LOB ORA-06512: на "SYS.DBMS_LOB", line 371 ORA-06512: на line 20"

Как можно выполнить задачу без ошибок?

PS: Почему текстовый файл (csv) закачивается в blob а не в clob просьба не флудить.
...
Рейтинг: 0 / 0
Проблема с блобом
    #37452816
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Chasovnikov,

смешиваешь работу с временным лобом и хранимым. createtemporary, open, close не нужны. только select for update.
...
Рейтинг: 0 / 0
Проблема с блобом
    #37452839
Alexey Chasovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-Alexey Chasovnikov,

смешиваешь работу с временным лобом и хранимым. createtemporary, open, close не нужны. только select for update.

Действительно. Убрал и все прошло.

Т.е. dbms_lob.erase работает только с хранимым blob-ом?

Мне не нужно блоб изменять в базе. Мне нужно его прочитать, обработать, и инфу из него разобрать и импортнуть в базу. Т.е. первоначальный блоб должен остаться неизменным в результате. Это так и будет?
...
Рейтинг: 0 / 0
Проблема с блобом
    #37452851
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey ChasovnikovPS: Почему текстовый файл (csv) закачивается в blob а не в clob просьба не флудить.
Да храни его в чем угодно.
Но должно же хватать мозгов для понятия того, что обрабатывать нужно clob.
...
Рейтинг: 0 / 0
Проблема с блобом
    #37452859
Alexey Chasovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|Но должно же хватать мозгов для понятия того, что обрабатывать нужно clob.

Какая разница по чему бежать по blob-бу или по clob-бу? Просил же не флудить
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с блобом
    #39806049
Basil_Tsvetkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Chasovnikov,

Чтобы работать с копией хранимого блоба его надо скопировать во временный.
Лично я это делаю так:

temp_clob := substr(stored_clob,1);

Это решение чем-то попахивает, но оно самое короткое и работает.
Правильнее, наверно, через DBMS_BLOB, но тогда нужно больше букв писать.
...
Рейтинг: 0 / 0
Проблема с блобом
    #39806068
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil_Tsvetkovсамое короткое||'' занимает еще меньше символов, особенно, если написать еще в селекте.
...
Рейтинг: 0 / 0
Проблема с блобом
    #39806277
Basil_Tsvetkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Супер!
Хотя всё это контринтуитивно, конечно.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с блобом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]