![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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