Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Подскажите, плиз, запуталась окончательно.
Нужно перекинуть данные LONG RAW(картинки) на удаленном сервере, более 32 КБайт, в поле BLOB другой БД. Распределенный запрос использовать не могу, ограничения LONG. На удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть? Изменить тип данных в исходной таблице соответственно тоже не могу. Как быть?
15 окт 07, 15:47    [4795362]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
В догонку. На форуме нашла прогу https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=119831&hl=long+blob+clob

procedure Long2Lob(
-- Uses DBMS_SQL to select a LONG column identified by p_LongQuery, and returns it in p_CLob.
p_LongQuery in varchar2,
p_CLob in out clob)

работает с ДЛИННЫМИ СТРОКАМИ, читает строку по кусочкам через dbms_sql.column_value_long и записывает кусочки в CLOB.
15 окт 07, 15:56    [4795440]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Elic
Member

Откуда:
Сообщений: 29991
STFF memo -> LOB or VARCHAR
15 окт 07, 15:57    [4795446]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
В догонку. На форуме нашла прогу https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=119831&hl=long+blob+clob

procedure Long2Lob(
-- Uses DBMS_SQL to select a LONG column identified by p_LongQuery, and returns it in p_CLob.
p_LongQuery in varchar2,
p_CLob in out clob)

работает через курсор, с ДЛИННЫМИ СТРОКАМИ, читает строку по кусочкам через dbms_sql.column_value_long и записывает кусочки в CLOB. Для моего случая не подходит, column_value_long ругается на тип данных. Можно ли читать как-то кусочками тип LONG RAW?
Пробовала использовать dbms_sql.column_value_raw, при этом описала переменную LONG RAW, в которую читала данные целиком, но картинка более 32000 не влазит. Что еще попробовать?
15 окт 07, 16:02    [4795495]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
fox_student
Подскажите, плиз, запуталась окончательно.
Нужно перекинуть данные LONG RAW(картинки) на удаленном сервере, более 32 КБайт, в поле BLOB другой БД. Распределенный запрос использовать не могу, ограничения LONG. На удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть? Изменить тип данных в исходной таблице соответственно тоже не могу. Как быть?

С голимым лонгрвом надо завязывать. Как вариант - грубо требуйте от тех, кто живет за
дблинком, создать аналогичный, по содержанию, лоб.
15 окт 07, 16:10    [4795556]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Elic, спасибо, оперативно. Можно поподробней, что такое CTAS + to_lob? Оба сервера Oracle 8.1.7...
15 окт 07, 16:14    [4795587]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Попробовала через команду Copy(sqlplus). Ограничение на данные long - 80. Итого в новосозданной таблице в поле LONG RAW вместо 9142Б всего 39Б. Можно ли увеличить длину копируемых данных? В источнике картинки до 500МБайт попадаются...

точно надо ГРУБО ТРЕБОВАТЬ...
15 окт 07, 16:41    [4795774]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Elic
Member

Откуда:
Сообщений: 29991
fox_student
Попробовала через команду Copy(sqlplus). Ограничение на данные long - 80.
RTFM SQL*Plus COPY Command (FAQ)
15 окт 07, 16:52    [4795844]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Спасибо, вижу что можно переменную LONG увеличить до 2 Гигабайтов. На что это может еще повлиять (сервер-то рабочий)?
15 окт 07, 17:17    [4795996]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Караул!
Увеличила размер переменной LONG до 10000, теперь sqlplus тип LONG RAW почему-то заменяет на LONG.

SQL> copy from ... to ... create t_foto (id, foto) using (select id, foto from t_foto where id = 1);

Array fetch/bind size is 15. (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 10000. (long is 10000)

ERROR:
ORA-01461: can bind a LONG value only for insert into a LONG column
15 окт 07, 17:44    [4796148]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Вывод: через сopy тоже не идет. Да если б и получилось, то что дальше делать? to_lob/to_blob 8.1.7 не понимает. Опять же по кусочкам тип LONG RAW читать не получается.
что такое CTAS + to_lob?
15 окт 07, 18:04    [4796290]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
fox_student
Вывод: через сopy тоже не идет. Да если б и получилось, то что дальше делать? to_lob/to_blob 8.1.7 не понимает. Опять же по кусочкам тип LONG RAW читать не получается.
что такое CTAS + to_lob?


все оно понимает....вы просто в доку не мсмотрите
15 окт 07, 18:18    [4796357]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
и тут еще чуток есть
15 окт 07, 18:33    [4796425]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Спасибо-спасибо! Перекинуть из LONG RAW в BLOB в пределах одной базы, через to_lob получилось, в т.ч. данные > 32K. Как бы теперь все данные LONG RAW забрать на локальную базу, через copy?
15 окт 07, 18:43    [4796469]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Elic
Member

Откуда:
Сообщений: 29991
fox_student
На удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть?
Кстати, какие проблемы запустить экспорт "местно"? Это практически то же, что и copy, только лучше.
15 окт 07, 18:51    [4796513]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Здесь все просто...
EXP-00009:
no privilege to export REMOTE_SERV's table T_FOTO
15 окт 07, 19:00    [4796558]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Всем спасибо, на сегодня у меня все. Завтра еще посмотрю set long...
15 окт 07, 19:06    [4796590]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
так не получается ??
copy from sourc_user/user_pass@xe to target_user/user_pas@xe create  Target_table(x) using select *  from sourc_table

причем
sourc_table (x long raw)
15 окт 07, 19:07    [4796592]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
pravednik


вeрнее
copy from sourc_user/user_pass@sour_DB to target_user/user_pas@targ_DB create Target_table(x) using select *  from sourc_table
15 окт 07, 19:09    [4796603]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Делаю
copy from ... to ... create t_foto (id, foto) using (select id, foto from t_foto where id = 1)
При стандартном значении параметра LONG = 80 копирует, но урезает данные. А при увеличении LONG = 100000 ругается на тип переменной:

Array fetch/bind size is 15. (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 100000. (long is 100000)

ERROR:
ORA-01461: can bind a LONG value only for insert into a LONG column

Исходная таблица t_foto имеет тип данных LONG RAW, при вставке с парам. LONG=80 в результирующей таблице тоже тип LONG RAW...
16 окт 07, 10:19    [4797780]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
fox_student
Member

Откуда:
Сообщений: 42
Кто-нить подскажет, как побороть
ORA-01461: can bind a LONG value only for insert into a LONG column
при копировании базы через sqlplus / copy?
17 окт 07, 10:58    [4803638]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Sergey Molchanov
Member

Откуда:
Сообщений: 83
Хоть вопрос годичной давности, но присоединюсь к нему.
Аналогичная ситуация: нужно вытащить в свою таблицу из удаленной базы поле LONG RAW.
Пробую командой COPY. Та же ошибка
ORA-01461: can bind a LONG value only for insert into a LONG column

Удаленная база, что прячется за дб_линком - MSSQL через Transparent Gateway

Поэтому:
1. TO_LOB не работает, потому что используется дб_линк
2. Попросить "владельца" исходной базы изменить тип поля - не получится, это прозрачный шлюз видит MSSQL-ный тип image как LONG RAW.

Кстати, текстовый LONG через команду COPY я уже победил :) А вот с двоичным полем пока бока.
Причем какую-то часть записей перед выводом ошибки оно-таки копирует. А именно те записи, длина которых измеряется сотнями-тысячами байт. А вот с пятизначными размерами (реальные данные в MSSQL-ной базе - длина полей в диапазоне от 19456 до 50176 байт) не хочет :(
12 авг 08, 10:32    [6055185]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Sergey Molchanov
Member

Откуда:
Сообщений: 83
Вдогонку:
Если задать set long 4000 или меньше - все хорошо без ошибок, если не считать за недостаток обрезанные значения полей. :(
Есла же задать set long 4001 или больше - выскакивает вышеупомянутая ошибка ORA-01461
12 авг 08, 10:46    [6055255]     Ответить | Цитировать Сообщить модератору
 Re: Опять LONG RAW -> BLOB  [new]
Uchitel
Guest
У меня похожая задача. В PL/SQL-ной процедуре мне надо прочесть и по кусочкам обработать колонку типа LONG RAW. Длина там больше 32К. Как это можно сделать?
27 авг 08, 23:17    [6117514]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить