-
Нужно передать параметр BLOB в хранимую процедуру без использования временного LOB локатора. Используются компоненты DOA. Оказалось, что на машине стоят 8 клиены, а они не работают со временными LOBами :).
Сейчас вот так:
...
LOB := TLOBLocator.CreateTemporary(Oq.Session, otBLOB, true);
LOB.CopyFrom(ms,ms.size);
(*
Здесь ms это поток, который содержит передаваемые данные
*)
with OQ do begin
SetComplexVariable('sDoc',LOB);
...
Execute;
Doc.sNameDoc:=GetVariable('id');
...
Session.Commit;
end;
-
> Оказалось, что на машине стоят 8 клиены
так заменить на те, которые соответствуют серверу
я, кстати, неоднократно сталкивался с неработоспособностью в некоторых случаях комбинаций разных версий клинетов и сервера, что моментально исчезало при синхронизации версий
так что не костыли нужно делать, а переломы лечить
-
> > Оказалось, что на машине стоят 8 клиены
>
> так заменить на те, которые соответствуют серверу
> я, кстати, неоднократно сталкивался с неработоспособностью
> в некоторых случаях комбинаций разных версий клинетов и
> сервера, что моментально исчезало при синхронизации версий
>
> так что не костыли нужно делать, а переломы лечить
Обязательно, особенно если клиентов несколько тысяч от Калиненграда до Камчатки, это ж как 2 байта переслать :) поменять пару строчек в программе гораздо сложнее :)
Ведь до 8 клиента передавались же как-то BLOB в хранимые процедуры?
-
> клиентов несколько тысяч от Калиненграда до Камчатки
кто хочет - ищет пути, кто не хочет - ищет отмазки
-
Нашёл случайно свой старый вопрос :)))
Поскольку нормальных ответов на на него так никто и не дал напишу своё решение. Оно очень простое.
1) Создаете табличку в БД с полем BLOB
2) Делаете в неё insert (без использования временного LOB локатора)
3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку :))))
Вот так всё просто и не нужно на Камчатку ехать клиенты обновлять :))) экономит массу гос.средств :)
-
>dima1983 (11.04.11 00:07) [4]
2) Делаете в неё insert (без использования временного LOB локатора)
3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку :))))
global temporary table.
и пляски с rowid - чреваты, ибо для записи он может меняться со временем.
поэтому лучше заводить честный PK.
-
> global temporary table.
> и пляски с rowid - чреваты, ибо для записи он может меняться
> со временем.
> поэтому лучше заводить честный PK.
8ой клиент клиент!!! ну читайте же вопрос!
И зачем заводить PK если таблица только для твоего приложения и строчка в ней живет менее минуты.
-
>dima1983 (13.04.11 11:55) [6]
>8ой клиент клиент!!! ну читайте же вопрос!
8-ой клиент не поддерживает работу с GTT?
>И зачем заводить PK если таблица только для твоего приложения и строчка в >ней живет менее минуты.
затем, что достоверно полагаться можно на PK, но нельзя на rowid
-
> >dima1983 (13.04.11 11:55) [6]
> >8ой клиент клиент!!! ну читайте же вопрос!
> 8-ой клиент не поддерживает работу с GTT?
>
> >И зачем заводить PK если таблица только для твоего приложения
> и строчка в >ней живет менее минуты.
> затем, что достоверно полагаться можно на PK, но нельзя
> на rowid
Думаю дальше диалог бессмыслен.
Вы такой классный специалист куда там!
-
>dima1983 (14.04.11 22:15) [8]
каждый сам мостит себе дорогу в ад)
успехов)
-
> затем, что достоверно полагаться можно на PK, но нельзя
> на rowid
В данном случае rowid проще и лучше PK.
А еще лучше - писать только одну запись и чистить табличку. И не надо ПК и rowid.
PS. А раньше только через таблички и писали лобы, временные лобы уже потом накопали.
-
> dima1983 (14.04.11 22:15) [8]
Не хами, а то забанят.
Хорошие спецы всегда вежливы. :)
-
>ANB (25.04.11 11:41) [10]
>В данном случае rowid проще и лучше PK.
чем?
-
> чем?
1) Быстрее
2) Не надо думать об алгоритме заполнения ПК.
-
> 2) Не надо думать об алгоритме заполнения ПК.
Тебе и так о нём не надо думать.
А ещё ПК индексируется.
-
> Ведь до 8 клиента передавались же как-то BLOB в хранимые
> процедуры?
до 8-го что клиента, что сервера, не было BLOB, были log raw.
а оно уже не поддерживается лет дцать
-
> Тебе и так о нём не надо думать.
Это как ? Автоинкрементов в оракле нету
> А ещё ПК индексируется.
А rowid индекс вообще не нужен
-
> Это как ? Автоинкрементов в оракле нету
Сиквенсов в оракле тоже нету?
-
еще надо реактор на субтепловых нейтронах приделать
-
> еще надо реактор на субтепловых нейтронах приделать
+1.
Зачем извращаться и плодить кучу объектов для тупого обходного маневра по передаче параметра ?
Это ВРЕМЯНКА !!! Зачем ей ПК и сиквенс ???