Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase IQ 15.1 - как работать с LONG BINARY колонками? / 16 сообщений из 16, страница 1 из 1
18.08.2009, 13:49
    #36149999
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Добрый день.

Проблема такого плана: имеется таблица с колонкой типа image. По документации, она может быть достаточно большой (length ranging from zero (0) to 512TB (terabytes) )

Однако, при попытке сделать Update либо Insert, вылетает ошибка
IQbinary data not supported on data longer > than 32767 Bind host variable

Покурив доки, нашел, что лонг байнари переменные у них зачем-то конвертируются в varbinary при передаче , а varbinary ограничено 32К чего мне явно мало.

Дабы избавиться от переменных, попробовал пихать бинарник прямо в текст запроса, наподобие UPDATE Entities SET Data = 0x504B3414000808F61123BE WHERE ID=1, однако на достаточно длинных данных вылетает
IQCould not execute statement.
Syntax error near '±!@' on line 1
SQLCODE=-131, ODBC 3 State="42000"
Line 1, column 1

Да и странный это способ.

Так как же работать с этими полями в IQ?
...
Рейтинг: 0 / 0
18.08.2009, 14:43
    #36150185
up
up
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexs,

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00172.1510/html/iqlob/CHDEJDJI.htm
...
Рейтинг: 0 / 0
18.08.2009, 14:56
    #36150226
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
up,

Смысл приведённой тобой ссылки: "У нас в IQ есть Large Objects Management Option и она должна быть лицензирована"
Судя по тому, что таблицы с такими колонками создаются на ура, эта опция у меня есть.

Или я чего-то недопонимаю?
...
Рейтинг: 0 / 0
18.08.2009, 15:11
    #36150264
up
up
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexs,

1. Да
2. An inbound !!! LONG BINARY variable (a host variable or SQL variable used by IQ) is limited to a length of 32767

Т.е. судя по ошибке как раз это и получается в момент биндинга переменной (откуда вызывается insert, update ?).

3. А загрузить (чтобы проверить, что всё работает) я бы попробовал для начала так:

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00172.1510/html/iqlob/CIHJIDCC.htm
...
Рейтинг: 0 / 0
18.08.2009, 16:09
    #36150499
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
up,

попробовал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LOAD TABLE Entities (
	FolderID,
	EntityTypeID,
	EntityKey,
        Content,
        Name,
	Data BINARY FILE (',') NULL('NULL')
)
FROM 'c:\1.txt'
QUOTES OFF ESCAPES OFF;
Select * from Entities

содержимое файла 1.тхт
Код: plaintext
 15 , 6 ,blabla,content,name,americanninja.avi

Запускаю - ошибок не выдаёт, новых строк в таблице не появляется.
Не ожидал такого.

Это может указывать на то, что данная опция не лицензирована? Можно ли как-то увидеть список всех фич сервера, которые у меня лицензированы?
...
Рейтинг: 0 / 0
18.08.2009, 16:49
    #36150638
up
up
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexs,

1. sp_iqlmconfig
2. Для Load попробуйте указать message log ... (возможно есть какие-то ошибки при Load).
...
Рейтинг: 0 / 0
18.08.2009, 17:10
    #36150694
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
up,

C LoadTable разобрались, надо было оказывается ставить запятую в конце строчки в 1.тхт

Вставляет ок. Значит, лицензия есть..

Что ещё можно попробовать?
...
Рейтинг: 0 / 0
18.08.2009, 18:08
    #36150826
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
А может быть такое, что IQ изначально заточен под реад-онли процессинг данных, поэтому так всё плохо?
...
Рейтинг: 0 / 0
19.08.2009, 13:23
    #36152100
up
up
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexs,

А что именно плохо? Откуда вставлять хотим (на чём пишем)?
Если хотим напрямую из клиентского приложения, то всё то же самое, что и для Sybase ASA.
Посмотрите ещё на процедурку xp_read_file.

P.S. Гляньте что такое host variable.
...
Рейтинг: 0 / 0
19.08.2009, 13:42
    #36152170
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
upLexs,
А что именно плохо? Откуда вставлять хотим (на чём пишем)?
Если хотим напрямую из клиентского приложения, то всё то же самое, что и для Sybase ASA.


Плохо например то, что в IQ (в отличие от ASE и Anywhere) напрочь остутствует поддержка юникодных типов nvarchar и ntext. Также плохо то, что 32 килобайтами ограничен размер байнари переменных.

Пишем на дотнете. Запросы идут в виде простых команд с параметрами (НЕ сторед процедуры)
Для коннекшена используем ADO от anywhere, вроде бы подходит, и ничего другого пока не нашли (iAnywhere.Data.SQLAnywhere.dll)

P.S. host variable - это то что подставляется вместо '?' сервером в запросах вида
Код: plaintext
UPDATE Entities SET Data = ? WHERE ID= 1 
или я неправ?
...
Рейтинг: 0 / 0
19.08.2009, 16:28
    #36152754
up
up
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexs,

А если взять всё то же самое, но только для ASA в качестве СУБД, то работает на этой версии провайдера?
...
Рейтинг: 0 / 0
19.08.2009, 16:36
    #36152792
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
up,

да
...
Рейтинг: 0 / 0
01.09.2009, 15:58
    #36173058
Lexs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
никакого решения пока не придумано. Похоже, IQ просто действительно настолько убог.
...
Рейтинг: 0 / 0
01.09.2009, 16:47
    #36173230
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
вы бы запостили вопрос на родной сайбейзовый форум (http://www.sybase.com/detail?id=203800). IQ доступен в нашей стране единицам счастливчиков, так что вероятность наткнуться на знающего пока мала.
...
Рейтинг: 0 / 0
01.09.2009, 16:52
    #36173247
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
а вот это не ваш топик случайно?
http://forums.sybase.com/cgi-bin/webnews.cgi?cmd=item-3802&group=sybase.public.iq
...
Рейтинг: 0 / 0
01.09.2009, 17:04
    #36173283
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Lexsникакого решения пока не придумано. Похоже, IQ просто действительно настолько убог.
ну как бы в доке написано, что inbound host variable (то есть определяемые провайдером доступа информации) не могут превышать 32к, а outbound (то есть определяемые как переменные сессии IQ) - могут быть до 2 гб.

Вот пример из доки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
EXEC SQL BEGIN DECLARE SECTION;
DECL_BINARY(  5000  ) buffer;
EXEC SQL END DECLARE SECTION;
EXEC SQL CREATE VARIABLE hold_blob LONG BINARY;
EXEC SQL SET hold_blob = '';
for(;;) {
	/* read some data into buffer ... */
	size = fread( &(buffer.array),  1 ,  5000 , fp );
	if( size <=  0  ) break;
	buffer.len = size;


	/* add data to blob using concatenation
		Note that concatenation works for 
		binary data too! */
	EXEC SQL SET hold_blob = hold_blob || :buffer;
}
EXEC SQL INSERT INTO some_table VALUES (  1 , hold_blob );
EXEC SQL DROP VARIABLE hold_blob;
Что в нем делается:
1. Создается сессионная переменная IQ hold_blob
2. В буфер считывается информация из файла
3. Через SQL переменной IQ присваивается буфер
4. В таблицу вставляется запись с сессионной переменной
5. Сессионная переменная удаляется

Попробуйте адаптировать этот пример, возможно получится. Так же еще стоит рассмотреть вариант загрузки BLOB столбцов через расширенный синтаксис LOAD TABLE ... BINARY FILE. Плюс никто не мешает на IQ написать веб-сервис, который можно вызывать, передавая через POST данные, где уже дальше сервис просто будет их записывать в таблицу. В общем варианты думаю есть, не все так убого ;)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase IQ 15.1 - как работать с LONG BINARY колонками? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]