powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Опять LONG RAW -> BLOB
27 сообщений из 27, показаны все 2 страниц
Опять LONG RAW -> BLOB
    #34869389
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, плиз, запуталась окончательно.
Нужно перекинуть данные LONG RAW(картинки) на удаленном сервере, более 32 КБайт, в поле BLOB другой БД. Распределенный запрос использовать не могу, ограничения LONG. На удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть? Изменить тип данных в исходной таблице соответственно тоже не могу. Как быть?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869437
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку. На форуме нашла прогу /topic/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.
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869440
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STFF memo -> LOB or VARCHAR
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869471
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку. На форуме нашла прогу /topic/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 не влазит. Что еще попробовать?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869506
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_studentПодскажите, плиз, запуталась окончательно.
Нужно перекинуть данные LONG RAW(картинки) на удаленном сервере, более 32 КБайт, в поле BLOB другой БД. Распределенный запрос использовать не могу, ограничения LONG. На удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть? Изменить тип данных в исходной таблице соответственно тоже не могу. Как быть?
С голимым лонгрвом надо завязывать. Как вариант - грубо требуйте от тех, кто живет за
дблинком, создать аналогичный, по содержанию, лоб.
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869524
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, спасибо, оперативно. Можно поподробней, что такое CTAS + to_lob? Оба сервера Oracle 8.1.7...
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869638
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовала через команду Copy(sqlplus). Ограничение на данные long - 80. Итого в новосозданной таблице в поле LONG RAW вместо 9142Б всего 39Б. Можно ли увеличить длину копируемых данных? В источнике картинки до 500МБайт попадаются...

точно надо ГРУБО ТРЕБОВАТЬ...
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869682
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_studentПопробовала через команду Copy(sqlplus). Ограничение на данные long - 80.RTFM SQL*Plus COPY Command (FAQ)
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869767
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, вижу что можно переменную LONG увеличить до 2 Гигабайтов. На что это может еще повлиять (сервер-то рабочий)?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869864
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Караул!
Увеличила размер переменной 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
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869938
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывод: через сopy тоже не идет. Да если б и получилось, то что дальше делать? to_lob/to_blob 8.1.7 не понимает. Опять же по кусочкам тип LONG RAW читать не получается.
что такое CTAS + to_lob?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34869978
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_studentВывод: через сopy тоже не идет. Да если б и получилось, то что дальше делать? to_lob/to_blob 8.1.7 не понимает. Опять же по кусочкам тип LONG RAW читать не получается.
что такое CTAS + to_lob?

все оно понимает....вы просто в доку не мсмотрите
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870019
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и тут еще чуток есть
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870045
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо-спасибо! Перекинуть из LONG RAW в BLOB в пределах одной базы, через to_lob получилось, в т.ч. данные > 32K. Как бы теперь все данные LONG RAW забрать на локальную базу, через copy?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870068
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_studentНа удаленном сервере делать ничего не могу, в т.ч. экспорт - ограничения доступа. Как быть?Кстати, какие проблемы запустить экспорт "местно"? Это практически то же, что и copy, только лучше.
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870091
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь все просто...
EXP-00009:
no privilege to export REMOTE_SERV's table T_FOTO
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870106
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, на сегодня у меня все. Завтра еще посмотрю set long...
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870107
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так не получается ??
Код: plaintext
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)
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870112
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednik

вeрнее
Код: plaintext
copy from sourc_user/user_pass@sour_DB to target_user/user_pas@targ_DB create Target_table(x) using select *  from sourc_table
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34870722
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю
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...
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #34873988
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нить подскажет, как побороть
ORA-01461: can bind a LONG value only for insert into a LONG column
при копировании базы через sqlplus / copy?
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #35482466
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть вопрос годичной давности, но присоединюсь к нему.
Аналогичная ситуация: нужно вытащить в свою таблицу из удаленной базы поле 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 байт) не хочет :(
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #35482493
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:
Если задать set long 4000 или меньше - все хорошо без ошибок, если не считать за недостаток обрезанные значения полей. :(
Есла же задать set long 4001 или больше - выскакивает вышеупомянутая ошибка ORA-01461
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #35509800
Uchitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня похожая задача. В PL/SQL-ной процедуре мне надо прочесть и по кусочкам обработать колонку типа LONG RAW. Длина там больше 32К. Как это можно сделать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять LONG RAW -> BLOB
    #40035909
DEBugger13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Molchanov
Хоть вопрос годичной давности, но присоединюсь к нему.
Аналогичная ситуация: нужно вытащить в свою таблицу из удаленной базы поле 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 байт) не хочет :(


В Oracle 19c все так же - через dblink из MSSQL через нативный gateway поле видно как LONG RAW.
вопрос к знатокам - зачем так делать?
Неужели нельзя сразу сделать нормальный BLOB ?

Со строками длиной меньше 32к проблем нет, а вот больше - средствами pl/sql никак не вытягиваются.
Причем, если смотреть строку из PL/SQL Developer - данные видны с длиной больше 32к.
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #40035944
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно также использовать PL/SQL для работы с LONG
Пример заливки varchar(8000) c MSSQL to CLOB через dblink

например:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
$ (echo "desc dropme@mm";echo "desc v_dropme@mm")|sqlplus -l -s system/***@d1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ==>s1                                                 LONG
 s2                                          VARCHAR2(2000 CHAR)
 s3                                                 VARCHAR2(1000 CHAR)
 s4                                                 VARCHAR2(50 CHAR)
 id                                                 NUMBER(10)
--------------------------------------


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
-- создаем тип запись с нужными полями
create or repace type t_dropme_row as object (
id number
,s1 clob
,s2 varchar2(2000)
,s3 varchar2(1000)
,s4 varchar(50)
);

-- создаем тип таблицы с этими записями
create or replace type t_dropme_tab as table of t_dropme_row;

-- создаем pipeline функцию возвращающую нужные нам записи  
create or replace function f_dropme_tab return t_dropme_tab
pipelined
as
rout  t_dropme_row := t_dropme_row(0,null,null,null,null);
begin
dbms_lob.createtemporary(rout.s1,true);
for rin in (SELECT * FROM dropme@mm) loop
 rout.id := rin."id";
 rout.s1 := to_clob(rin."s1");
 rout.s2 := rin."s2";
 rout.s3 := rin."s3";
 rout.s4 := rin."s4";
 pipe row (rout);
end loop;
end;
/

-- Можно работать 
SQL> set LONG 10000
SQL> select s1,length(s1) from table(f_dropme_tab);
...
736.......737.......738.......739.......740.......741.......742.......743.......
744.......745.......746.......747.......748.......749.......750.......751.......
752.......753.......754.......755.......756.......757.......758.......759.......

S1
--------------------------------------------------------------------------------
LENGTH(S1)
----------
760.......761.......762.......763.......764.......765.......766.......767.......
768.......769.......770.......771.......772.......773.......774.......775.......
776.......777.......778.......779.......780.......781.......782.......783.......
784.......785.......786.......787.......788.......789.......790.......791.......
792.......793.......794.......795.......796.......797.......798.......799....
      7997


Рекомендую также очень полезную статью по теме:

working with long columns
...
Рейтинг: 0 / 0
Опять LONG RAW -> BLOB
    #40035991
DEBugger13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin
Можно также использовать PL/SQL для работы с LONG
Пример заливки varchar(8000) c MSSQL to CLOB через dblink

например:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
$ (echo "desc dropme@mm";echo "desc v_dropme@mm")|sqlplus -l -s system/***@d1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ==>s1                                                 LONG
 s2                                          VARCHAR2(2000 CHAR)
 s3                                                 VARCHAR2(1000 CHAR)
 s4                                                 VARCHAR2(50 CHAR)
 id                                                 NUMBER(10)
--------------------------------------


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
-- создаем тип запись с нужными полями
create or repace type t_dropme_row as object (
id number
,s1 clob
,s2 varchar2(2000)
,s3 varchar2(1000)
,s4 varchar(50)
);

...


Рекомендую также очень полезную статью по теме:

working with long columns


Спасибо, уже читал и протестировал. Но это работает для символьного LONG, а надо LONG RAW
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Опять LONG RAW -> BLOB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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