![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
копирование blob [IB7]
July © (2006-09-06 12:31:00)Такая картина - в процедуре один запрос делает выборку из таблицы, записывает результат в локальные переменные, одна из них - типа blob. Потом другой запрос делает вставку в таблицу и одно из вставляемых полей - тоже типа blob, в него и делается попытка записать ту переменную. Есть подозрение, что скорее всего наш blob вовсе не копируется, а в новую запись просто вставляется указатель на ту же область данных, где хранится исходный массив blob.
Вопрос - каким образом, пользуясь средвами СУБД, действительно скопировать значение поля типа blob, т.е. создать его второй экземпляр и передать указатель именно на него, а не на исходный?
Буду признательна также за ссылки на какие-нибудь русскоязычные материалы по подобным вопросам о манипулировании blob-ами.
July (2006-09-07 18:00:00) [1]
> Это что такое?
собственно содержимое поля
Desdechado (2006-09-07 17:36:00) [2]> blob-массив
Это что такое?
July (2006-09-07 17:30:00) [3]
> Запоминаешь ID записи, манипулируешь с другими значениями,
> потом делаешь:
> INSERT INTO A( x,y )
> SELECT :переменная1, константа2, блоб_поле
> FROM Tabl WHERE ID=:сохраненныйID
> В переменной твои манипулированные значения, а блоб возьми
> живой, с пылу-с жару.
Ну ладно, посоветую коллеге этот способ, пусть пробует.
Однако, Desdechado, есть ли 100% гарантия, что будет скопирован сам blob-массив, а не указатель на этот массив, созданный для исходной записи?
Страдаю недостатком знаний по этому вопросу
Desdechado (2006-09-07 14:02:00) [4]> Не, одним запросом не получится
Почему?
Запоминаешь ID записи, манипулируешь с другими значениями, потом делаешь:
INSERT INTO A( x,y )
SELECT :переменная1, константа2, блоб_поле
FROM Tabl WHERE ID=:сохраненныйID
В переменной твои манипулированные значения, а блоб возьми живой, с пылу-с жару.
July (2006-09-07 13:41:00) [5]
> ibase.ru
Да, забыла, сейчас там поищу.
..но пока что везде встечаются только вопросы, касающиеся рабрты с блобами из приложения, а мне нужно в процедуре..
> INSERT INTO A( x,y ) SELECT m, n FROM B ...
Не, одним запросом не получится, прежде чем вставить запись, после извлечения делается еще несколько операций..
Desdechado (2006-09-06 18:06:00) [6]ibase.ru
много всего
INSERT INTO A( x,y ) SELECT m, n FROM B ...
July (2006-09-06 17:34:00) [7]
> Во-первых, "примерно" не считается.
:) ну ладно, не считается :)
Не сочтите за самонадеянность, но через конструкцию insert с select-ом я эту операцию не пробовала делать (просто занимаюсь сейчас другим), однако думаю что в этом случае уж точно можно будет не сомневаться, что скопируется не сам массив blob, а указатель на него.
> Во-вторых, не вижу описания и текста ошибки.
Проблема возникала не у меня, у коллеги, сейчас не могу точно процитировать, завтра может быть уточню и напишу.
Но вообще подобные непонятки с blob-ами периодически всплывают и пока чаще всего приводят к выводу - а ну его нафиг этот blob, обойдемся длиннющими varchar-ами :)
Но это же не выход ;)
Повторюсь - почитать бы что-нибудь об этом, а? :))
хоть чуточку более понятное чем англоязычная документация на IB..
Desdechado (2006-09-06 14:00:00) [8]Во-первых, "примерно" не считается.
Во-вторых, не вижу описания и текста ошибки.
July (2006-09-06 13:49:00) [9]
> это на клиенте или в ХП?
все делается запросами в перелах одной ХП
> Может, вставлять копию блоб лучше через INSERT ... SELECT
примерно это и делается, однако при дальнейшей работе возникают ошибки, которые и натолкнули на соображения, высказанные выше
Desdechado (2006-09-06 13:33:00) [10]> в локальные переменные
это на клиенте или в ХП?
Может, вставлять копию блоб лучше через INSERT ... SELECT