-
Вопрос к знатокам.
Проблема с выполнением такой процедуры из 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))
-
потому что типы данных в SQL и PL/SQL слегкка отличаются
-
Правильный$Вася ну и где решение?
-
что в блок pl/sql нельзя передать более 32k? И решения нет?
-
попробуй выставить Param.DataType и ParamType явно
-
думаю не поможет ибо тип есть тип и у него есть ограничения. даже если с клиента ничего не передавать, а последовательно делать конкатенацию блоб переменной прямо на сервере, то за пределы 32767 все равно не выпрыгнешь
-
попробуй выставить Param.DataType и ParamType явно
установил ftBlob и соответственно ptInput
не помогло
Жаль похоже придется писать через Insert а потом далее обрабатывать.
Всем спасибо.
-
через dbms_lob не поможет ?
-
>Медвежонок Пятачок © (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
Что я делаю не так?
|