Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c