Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 insert long row более 32kb  [new]
GrafDe
Member

Откуда:
Сообщений: 19
Добрый день.

Обращаюсь к вам со следующей проблемой -

Есть ПО использует БД Oracle, в таблице есть поле с типом long row.
Туда надо вносить большой объем данных, например бинарный код файлов, внести более 32kb не получается.

Пытался сделать через blob но не получилось, пример мои попыток ниже.
Прошу помочь в поиске решения, так как само ПО как то добавляет туда информацию.
Сам я уже в тупике. =(
Заранее благодарен за ваше внимание


  declare 
        ln_length number;
      begin
        dbms_lob.open (file_code, dbms_lob.lob_readonly);
        ln_length := dbms_lob.getlength (file_code);
        dbms_lob.read(file_code, ln_length, 1, lv_raw);
      end;        
     
      INSERT INTO ole_items 
(
         ole_item
)
      VALUES
 (      
         lv_raw       
);
         COMMIT;    
      dbms_lob.close (file_code);
12 июл 13, 12:16    [14556975]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
XCB
Member

Откуда:
Сообщений: 727
вы привели какойто обрывок кода... что такое lv_raw?
не показали структуру таблицы...
не отсюда ли застут грабли?
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/datatypes.htm
12 июл 13, 12:40    [14557186]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
GrafDe
Member

Откуда:
Сообщений: 19
XCB,

Извиняюсь - lv_raw long raw;
Да грабли от туда, только решить проблему это не помогло.
Пришел к решению использовать java oracle и добавлять данные по частям (32kb), но данное решение мне кажется все кривым.
12 июл 13, 13:06    [14557434]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
GrafDe,

CREATE TABLE на ole_items давай...
12 июл 13, 13:10    [14557455]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
зачем этот раритет?
Guest
GrafDe,

в plsql нет поддержки longов.
вставить данные можно только с клиента.
12 июл 13, 13:12    [14557470]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
GrafDe
Member

Откуда:
Сообщений: 19
MasterZiv,
create table OLE_ITEMS
(
ole_item_id NUMBER(10) not null,
ole_item_name NVARCHAR2(255) not null,
ole_item LONG RAW,
)

grant select, insert, update, delete on OLE_ITEMS to PUBLIC;
12 июл 13, 13:14    [14557497]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
GrafDe
Member

Откуда:
Сообщений: 19
зачем этот раритет?,
Сам удивлен что такое старье еще где то используется.
В общем все же придется через php или oracle java.
12 июл 13, 13:15    [14557520]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
GrafDe,

записывать джавой по частям - (я вас умоляю ) не надо.
читайте описание к тому языку, на котором написано ваше ПО.
клиентсайдовый интерфейс для вставки/чтения файла в/из long(raw) есть.

ну а по-хорошему быстрее уходите от longraw - stff тип проклят
12 июл 13, 13:20    [14557578]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
GrafDe
Member

Откуда:
Сообщений: 19
orawish,

Я бы с радостью ушел, только вот производитель ПО не уходит, увидеть как он туда что то вносит на прямую нельзя, нет исходников ПО, вносит данные как я понимаю сразу из Java.

Еще вариант родился ограничить размер данных, разбивать из на куски по 32767 вносить во временную таблицу а а оттуда уже через dbms_lob.read путем склеивания кусков делать update ole_item.
12 июл 13, 13:51    [14557865]     Ответить | Цитировать Сообщить модератору
 Re: insert long row более 32kb  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
GrafDe
orawish,

Я бы с радостью ушел, только вот производитель ПО не уходит, увидеть как он туда что то вносит на прямую нельзя, нет исходников ПО, вносит данные как я понимаю сразу из Java.

Еще вариант родился ограничить размер данных, разбивать из на куски по 32767 вносить во временную таблицу а а оттуда уже через dbms_lob.read путем склеивания кусков делать update ole_item.

грусть, печаль, тоска.
12 июл 13, 14:22    [14558178]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить