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

Проблема такого плана: имеется таблица с колонкой типа 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
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36150185
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexs,

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

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

Или я чего-то недопонимаю?
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36150264
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36150499
Lexs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36150638
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexs,

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

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

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

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

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

P.S. Гляньте что такое host variable.
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36152170
Lexs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36152754
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexs,

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

да
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36173058
Lexs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никакого решения пока не придумано. Похоже, IQ просто действительно настолько убог.
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36173230
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы бы запостили вопрос на родной сайбейзовый форум (http://www.sybase.com/detail?id=203800). IQ доступен в нашей стране единицам счастливчиков, так что вероятность наткнуться на знающего пока мала.
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36173247
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот это не ваш топик случайно?
http://forums.sybase.com/cgi-bin/webnews.cgi?cmd=item-3802&group=sybase.public.iq
...
Рейтинг: 0 / 0
Sybase IQ 15.1 - как работать с LONG BINARY колонками?
    #36173283
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase IQ 15.1 - как работать с LONG BINARY колонками?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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