Форум: "Базы";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
ВнизBLOB -> Oracle Найти похожие ветки
← →
rar (2010-03-18 12:10) [0]Вопрос к знатокам.
Проблема с выполнением такой процедуры из ClientDataSet
Почему при:
ClientDataSet.CommandText="insert into MyTable values (:pBLOB)"
все вставляется нормально
, а при
ClientDataSet.CommandText=
"begin insert into MyTable values (:pBLOB); end;"
если BLOB больше 32K, то выдается ошибка:
ORA-01460 Unimplemented or unreasonable conversion required?
(в обоих случаях использовалось ClientDataSet.Parameters[0].LoadFromFile(Path,ftBlob))
← →
Правильный$Вася (2010-03-18 12:35) [1]потому что типы данных в SQL и PL/SQL слегкка отличаются
← →
rar (2010-03-18 12:37) [2]Правильный$Вася ну и где решение?
← →
rar (2010-03-18 12:44) [3]что в блок pl/sql нельзя передать более 32k? И решения нет?
← →
Правильный$Вася (2010-03-18 13:24) [4]попробуй выставить Param.DataType и ParamType явно
← →
Медвежонок Пятачок © (2010-03-18 13:37) [5]думаю не поможет ибо тип есть тип и у него есть ограничения.
даже если с клиента ничего не передавать, а последовательно делать конкатенацию блоб переменной прямо на сервере, то за пределы 32767 все равно не выпрыгнешь
← →
rar (2010-03-18 13:45) [6]попробуй выставить Param.DataType и ParamType явно
установил ftBlob и соответственно ptInput
не помогло
Жаль похоже придется писать через Insert а потом далее обрабатывать.
Всем спасибо.
← →
Игорь Шевченко © (2010-03-18 19:25) [7]через dbms_lob не поможет ?
← →
Кщд (2010-03-19 08:00) [8]
>Медвежонок Пятачок © (18.03.10 13:37) [5]
> даже если с клиента ничего не передавать, а последовательно
> делать конкатенацию блоб переменной прямо на сервере, то
> за пределы 32767 все равно не выпрыгнешь
SQL> declare
2 v_amount pls_integer;
3 v_buff raw(32767);
4 v_blob blob;
5 begin
6
7 v_buff := utl_raw.cast_to_raw(lpad("Вставить более 32кБ в blob нельзя, ибо табу!", 32767, "!"));
8 v_amount := utl_raw.length(v_buff);
9
10 dbms_output.put_line("Размер буфера: " || v_amount);
11
12 dbms_lob.createtemporary(v_blob, true, dbms_lob.session);
13 dbms_lob.open(v_blob, dbms_lob.lob_readwrite);
14 for i in 1..100
15 loop
16 dbms_lob.writeappend(v_blob, v_amount, v_buff);
17 end loop;
18
19 dbms_output.put_line("Размер полученного blob: " || dbms_lob.getlength(v_blob));
20
21 dbms_lob.close(v_blob);
22 dbms_lob.freetemporary(v_blob);
23
24 exception
25 -- oops! something happened! alarm!
26 when others then
27 dbms_output.put_line(sqlerrm);
28 end;
29 /
Размер буфера: 32767
Размер полученного blob: 3276700
PL/SQL procedure successfully completed
Что я делаю не так?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c