Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BLOB поля [D7]


Maverick ©   (2004-10-15 17:24:00) 

Здравствуйте все!
на сервере отписана процедура вида (взято прямо из хелпа):
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 19:03:00) [1]

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


Val   (2004-10-15 18:21:00) [2]

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


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

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


Val   (2004-10-15 17:57:00) [4]

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


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

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

       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;


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

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


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

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


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

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


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

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


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

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


Reindeer Moss Eater   (2004-10-15 17:41:00) [11]

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

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


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

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


Reindeer Moss Eater   (2004-10-15 17:33:00) [13]

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


Reindeer Moss Eater   (2004-10-15 17:31:00) [14]

ORA-22990: LOB locators cannot span transactions
Cause: A LOB locator selected in onetransaction cannot be used in a differenttransaction.

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


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

база- Oracle


Наверх

Титульная страница Поиск, карта сайта Написать письмо