Здравствуйте, Gvaerodin, Вы писали:
G>Добрый день! Помогите пожалуйста! Ооочень надо! Как можно преобразовать тип BLOB в LONG RAW.
А можно поинтересоваться чем продиктована такая постановка задачи. Обычно надо бывает наоборот. Тип LONG RAW это уже рудимент в оракле и оракл настоятельно рекомендует переходить на BLOB. Если не сложно, поясните для чего это надо?
Здравствуйте, Alexey Frolov, Вы писали:
AF>Здравствуйте, Gvaerodin, Вы писали:
G>>Добрый день! Помогите пожалуйста! Ооочень надо! Как можно преобразовать тип BLOB в LONG RAW.
AF>А можно поинтересоваться чем продиктована такая постановка задачи. Обычно надо бывает наоборот. Тип LONG RAW это уже рудимент в оракле и оракл настоятельно рекомендует переходить на BLOB. Если не сложно, поясните для чего это надо?
Дело в том что в есть уже куча софта который работает с LONG RAW данными в базе и заказчик не собирается ничего менять. Я написал dll которая получает на входе BLOB (изображение) переворачивает его и возвращает обратно в BLOB а оказалось что надо в LONG RAW
Здравствуйте, Gvaerodin, Вы писали:
AF>>Здравствуйте, Gvaerodin, Вы писали:
G>Дело в том что в есть уже куча софта который работает с LONG RAW данными в базе и заказчик не собирается ничего менять. Я написал dll которая получает на входе BLOB (изображение) переворачивает его и возвращает обратно в BLOB а оказалось что надо в LONG RAW
DLL ведь ваша, что мешает на входе получать блоб а на выходе писать данные в LONG RAW? Какими средствами вы пользуетесь для записи в базу?
Здравствуйте, Alexey Frolov, Вы писали:
AF>Здравствуйте, Gvaerodin, Вы писали:
AF>>>Здравствуйте, Gvaerodin, Вы писали:
G>>Дело в том что в есть уже куча софта который работает с LONG RAW данными в базе и заказчик не собирается ничего менять. Я написал dll которая получает на входе BLOB (изображение) переворачивает его и возвращает обратно в BLOB а оказалось что надо в LONG RAW
AF>DLL ведь ваша, что мешает на входе получать блоб а на выходе писать данные в LONG RAW? Какими средствами вы пользуетесь для записи в базу?
пользую OCI — получаю на входе OCILOBLocator вот его я и хотел бы преобразовать в LONG RAW и у меня не получается это сделать.
Здравствуйте, Gvaerodin, Вы писали:
G>Добрый день! Помогите пожалуйста! Ооочень надо! Как можно преобразовать тип BLOB в LONG RAW.
Может в лоб, через запись BLOB'а в поле типа LONG RAW и вытаскивания его оттуда? По крайней мере на Oracle 9i прокатывает следующее:
declare
r raw(32);
b blob;
lr long raw;
begin-- Формирование тестового BLOB'а
dbms_lob.createTemporary(b, false, dbms_lob.SESSION);
r := utl_raw.cast_to_raw('1234567890');
for i in 1 .. 10000 loop
dbms_lob.writeAppend(b, 10, r);
end loop;
-- Cобственно запись его в поле LONG RAWdelete test_long;
insert into test_long (lrdata) values (b);
select lrdata into lr from test_long;
commit;
end;
/
Здравствуйте, Gvaerodin, Вы писали:
G>пользую OCI — получаю на входе OCILOBLocator вот его я и хотел бы преобразовать в LONG RAW и у меня не получается это сделать.
Но ведь для того чтобы конвертировать данные вы наверняка читаете их в буфер, я не прав? Затем этот буфер можно забиндить в sql запрос OCIBindByPos и записать в поле LONG RAW
Здравствуйте, Gvaerodin, Вы писали:
G>пользую OCI — получаю на входе OCILOBLocator вот его я и хотел бы преобразовать в LONG RAW и у меня не получается это сделать.
А как пытался?
Размер этих LONG RAW может быть произвольным или ограничен?
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Gvaerodin, Вы писали: W>А как пытался? W>Размер этих LONG RAW может быть произвольным или ограничен?
+1
Нужно учесть ограничения LONG RAW. Именно поэтому из BLOB в LONG RAW напрямую данные не конвертятся.
Здравствуйте, Alexey Frolov, Вы писали:
AF>Здравствуйте, Gvaerodin, Вы писали:
G>>пользую OCI — получаю на входе OCILOBLocator вот его я и хотел бы преобразовать в LONG RAW и у меня не получается это сделать.
AF>Но ведь для того чтобы конвертировать данные вы наверняка читаете их в буфер, я не прав? Затем этот буфер можно забиндить в sql запрос OCIBindByPos и записать в поле LONG RAW
Я получаю в dll указатель на OCILOBLocator из него читаю данные в буфер затем эти данные в поток — затем с помощью gdiplus работаю с изображением — и затем по обратному алгоритму — данные в поток — затем в буфер — затем в указатель на OCILobLocator — а теперь необходимо сделать что бы данные писались не в OCILobLocator а в OCIRaw. Контекста у меня нет. соединения тоже. т.к это dll.
Здравствуйте, Gvaerodin, Вы писали:
G>Я получаю в dll указатель на OCILOBLocator из него читаю данные в буфер затем эти данные в поток — затем с помощью gdiplus работаю с изображением — и затем по обратному алгоритму — данные в поток — затем в буфер — затем в указатель на OCILobLocator — а теперь необходимо сделать что бы данные писались не в OCILobLocator а в OCIRaw. Контекста у меня нет. соединения тоже. т.к это dll.
Как это нет контекста, а как вы читаете данные. Можно взглянуть на тот участок кода?
Здравствуйте, Alexey Frolov, Вы писали:
AF>Здравствуйте, Gvaerodin, Вы писали:
G>>Я получаю в dll указатель на OCILOBLocator из него читаю данные в буфер затем эти данные в поток — затем с помощью gdiplus работаю с изображением — и затем по обратному алгоритму — данные в поток — затем в буфер — затем в указатель на OCILobLocator — а теперь необходимо сделать что бы данные писались не в OCILobLocator а в OCIRaw. Контекста у меня нет. соединения тоже. т.к это dll.
AF>Как это нет контекста, а как вы читаете данные. Можно взглянуть на тот участок кода?
Извините просто голова уже не варила — контекст есть конечно.
Здравствуйте, Gvaerodin, Вы писали:
G>Здравствуйте, Alexey Frolov, Вы писали:
AF>>Здравствуйте, Gvaerodin, Вы писали:
G>>>Я получаю в dll указатель на OCILOBLocator из него читаю данные в буфер затем эти данные в поток — затем с помощью gdiplus работаю с изображением — и затем по обратному алгоритму — данные в поток — затем в буфер — затем в указатель на OCILobLocator — а теперь необходимо сделать что бы данные писались не в OCILobLocator а в OCIRaw. Контекста у меня нет. соединения тоже. т.к это dll.
AF>>Как это нет контекста, а как вы читаете данные. Можно взглянуть на тот участок кода?
G>Извините просто голова уже не варила — контекст есть конечно.
В таком случае на выходе пишете запрос update pictutes_table set content=:1 where id=:2, ну или что то в этом духе и биндите буфер с бинарными данными. А вот интересно откуда берется LOBLocator если база блобами не пользуется?