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