Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1315629693
morba
2011-09-10 08:41
2011.12.25
Помогите с реализацией отключения usb устройств


15-1315315520
Palladin
2011-09-06 17:25
2011.12.25
Ассоциированные с файлом иконки в Vista и Windows 7


15-1314966325
oldman
2011-09-02 16:25
2011.12.25
Может кому и пригодится...


15-1315750988
Kerk
2011-09-11 18:23
2011.12.25
Попиарю чуток свое творчество :)


15-1315548799
user1987
2011-09-09 10:13
2011.12.25
Часы на рабочем столе