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

Вниз

BLOB поля   Найти похожие ветки 

 
Maverick   (2004-10-15 17:24) [0]

Здравствуйте все!
на сервере отписана процедура вида (взято прямо из хелпа):
CREATE OR REPLACE

PROCEDURE ODAC_BLOB_Insert (
 p_ID NUMBER,
 p_Title VARCHAR2,
 p_Pic OUT BLOB
)
is
begin
 INSERT INTO ODAC_BLOB(ID, Title, Pic)
 VALUES (p_ID, p_Title, EMPTY_BLOB())
 RETURNING Pic
 INTO p_Pic;
end;

вызываю функцию и передаю blob, вылетает ошибка
"LOB locators cannot span transactions"
мучаюсь второй день, кто сталкивался с подобными проблемами помогите плиз


 
Maverick   (2004-10-15 17:26) [1]

база- Oracle


 
Reindeer Moss Eater ©   (2004-10-15 17:31) [2]

ORA-22990: LOB locators cannot span transactions
Cause: A LOB locator selected in one transaction cannot be used in a different transaction.

Причина скорее всего в способе вызова процедуры из приложения


 
Reindeer Moss Eater ©   (2004-10-15 17:33) [3]

То есть лоб-локатор возвращается на клиента что бы потом использоваться для записи в него данных.
И все это поделено на две разные транзакции (рождение локатора и запись данных)


 
Maverick   (2004-10-15 17:38) [4]

ээ.. из приложения я просто вызываю процедуру.. откуда там могут появится доп транзакции?
хотя ща попробую проверить на существование транзакций и их отрубить если есть...


 
Reindeer Moss Eater ©   (2004-10-15 17:41) [5]

insert ... values ... returning надо писать в SQL.Text используемого компонента.
Если конечно позволяет используемая библиотека.

Приведенный пример выше - для использования в PL/SQL.


 
Maverick   (2004-10-15 17:44) [6]

дык я вызываю хранимую процедуру и передаю blob поле как параметр,
если использовать копоненты то там нормально, проблема именно с процедурой


 
Reindeer Moss Eater ©   (2004-10-15 17:44) [7]

Приведенный пример выше - для использования в PL/SQL.


 
Maverick   (2004-10-15 17:48) [8]

а где можно подробнее почитать про рождение локатора и запись данных?


 
Val ©   (2004-10-15 17:48) [9]

Что-то я не очень понял: передаете при вызове блоб как параметр, а он у вас объявлен выходным..


 
Reindeer Moss Eater ©   (2004-10-15 17:49) [10]

В бело-оранжевой книжке с муравьями на обложке.
Иногда её видно прямо здесь.


 
Maverick   (2004-10-15 17:50) [11]

я сам это не до конца понял но так говорят отцы разработчики :)
вызываю из приложения след образом :

       with OraStoredProc do begin
         StoredProcName := "ODAC_BLOB_Insert";
         PrepareSQL;  // receive parameters

         ParamByName("p_ID").AsInteger := 10;
         ParamByName("p_Title").AsString := ExtractFileName(FileName);

         ParamByName("p_Pic").ParamType := ptInput;  
         ParamByName("p_Pic").AsOraBlob.LoadFromFile(FileName);
         Execute;


 
Val ©   (2004-10-15 17:57) [12]

>[11] Maverick   (15.10.04 17:50)
кто говорит, где?


 
Maverick   (2004-10-15 18:01) [13]

>[12] Val(15.10.04 17:57)
в хелпе для ODAC


 
Val ©   (2004-10-15 18:21) [14]

>Reindeer Moss Eater ©
прокомментируйте, пожалуйста.


 
Maverick   (2004-10-15 19:03) [15]

Reindeer Moss Eater, большое спасибо за наводку...где то действительно видимо была открыта транзакция...
вообщем commit  я делал в вызываемой процедуре.
убрал там commit  и в приложении процедуру вызвал внутри транзакции- все заработало, хотя до конца еще не разобрался



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1099285151
Anics
2004-11-01 07:59
2004.11.14
Как отловить действие пользователя "Завершение работы" ?


3-1097560479
Санёк
2004-10-12 09:54
2004.11.14
ADO - обновление данных перед редактированием


1-1099335963
dolphin
2004-11-01 22:06
2004.11.14
динамическое создание форм


1-1099339331
Skiter
2004-11-01 23:02
2004.11.14
Работа с TImages


14-1098972626
_none_
2004-10-28 18:10
2004.11.14
кидалово!