ошибка с blob-полем
ошибка с blob-полем
Добрый день!
есть
в таблице т1 поле s1 определено как blob, name - varchar(32);
запрос вида
delete from name='имя' and s1='бла-бла-бла'
имею при выполнении (в программе, в ibexpert) ошибку
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
что я делаю не так? в faq ответа не нашел.
причем если в эксперте ограничиваю значение для s1 по длине (просто для проверки), то ошибки нет
есть
в таблице т1 поле s1 определено как blob, name - varchar(32);
запрос вида
delete from name='имя' and s1='бла-бла-бла'
имею при выполнении (в программе, в ibexpert) ошибку
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
что я делаю не так? в faq ответа не нашел.
причем если в эксперте ограничиваю значение для s1 по длине (просто для проверки), то ошибки нет
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: ошибка с blob-полем
Что значит "ограничиваю значение s1 по длине"? BLOB поля ограничены только возможностями сервера.
Да и запрос "delete from name='имя'" чисто технически выполняться не может...
Да и запрос "delete from name='имя'" чисто технически выполняться не может...
Re: ошибка с blob-полем
ну да, конечно.Dimitry Sibiryakov писал(а):Что значит "ограничиваю значение s1 по длине"? BLOB поля ограничены только возможностями сервера.
Да и запрос "delete from name='имя'" чисто технически выполняться не может...
я не копировал текст, а набирал заново в тексте этого сообщения. поэтому пропустил.
на самом деле пытаюсь выполнить
delete from t1 where name='имя' and s1='...'
В s1 хранится текст sql-предложения, типа 'select s1,s2,s3,s4,..... from ..... ' - все как положено по синтаксису.
так вот, если я принудительно делаю длину меньше (укорачиваю селект, не заботясь о синтаксисе), то начиная с некоторого значения эксперт ошибку перестает выдавать.
т.е., есть какая-то зависимость от длины значения, если это blob? или с blob вообще нельзя проверять значения в where ?
Re: ошибка с blob-полем
Хоть поле s1 и блоб, все-таки сравнивается в запросе он со строкой, и больше 32к она быть никак не может. И если в эту строку запихнуть больше, то будет как раз такая ошибка.
Вообще удивляет, что Вы не можете посчитать размер этого самого = '...' когда ошибка не выдается, и когда начинает выдаваться.
То есть, фраза "начиная с некоторого значения эксперт ошибку перестает выдавать" очень замечательная. Типа, я тут чего то делаю, и ошибка то выдается, то нет. А чего делаю - непонятно.
Вообще удивляет, что Вы не можете посчитать размер этого самого = '...' когда ошибка не выдается, и когда начинает выдаваться.
То есть, фраза "начиная с некоторого значения эксперт ошибку перестает выдавать" очень замечательная. Типа, я тут чего то делаю, и ошибка то выдается, то нет. А чего делаю - непонятно.
Re: ошибка с blob-полем
могу посчитать и считал.kdv писал(а):Хоть поле s1 и блоб, все-таки сравнивается в запросе он со строкой, и больше 32к она быть никак не может. И если в эту строку запихнуть больше, то будет как раз такая ошибка.
Вообще удивляет, что Вы не можете посчитать размер этого самого = '...' когда ошибка не выдается, и когда начинает выдаваться.
То есть, фраза "начиная с некоторого значения эксперт ошибку перестает выдавать" очень замечательная. Типа, я тут чего то делаю, и ошибка то выдается, то нет. А чего делаю - непонятно.
просто , думал что это не принципиально.
32к тут не пахнет - всего 250 байт. Т.е., оставляю в значении чуть меньше - 240 и ошибки нет.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: ошибка с blob-полем
Версию сервера ты, похоже, тоже считаешь непринципиальной... А зря.
Добавлено немного погодя:
Чисто от скуки попытался воспроизвести:
Никаких ошибок нет. К чему бы это?..
Добавлено немного погодя:
Чисто от скуки попытался воспроизвести:
Код: Выделить всё
Use CONNECT or CREATE DATABASE to specify a database
create database "bt.fdb" user "sysdba" password "masterkey";
create table t (n varchar(40), b blob sub_type text);
insert into t values ('abc', 'abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi ');
delete from t where n='abc' and b='abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi ';
show version;
ISQL Version: WI-V2.1.1.17910 Firebird 2.1
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.1.1.17910 Firebird 2.1"
Firebird/x86/Windows NT (remote server), version "WI-V2.1.1.17910 Firebird 2.1/XNet (SD-ACER7)/P11"
Firebird/x86/Windows NT (remote interface), version "WI-V2.1.1.17910 Firebird 2.1/XNet (SD-ACER7)/P11"
on disk structure version 11.1
drop database;
Re: ошибка с blob-полем
хорошо, что Вы меня так возите фейсом - следующий раз буду знать как задавать вопрос.Dimitry Sibiryakov писал(а):Версию сервера ты, похоже, тоже считаешь непринципиальной... А зря.
Добавлено немного погодя:
Чисто от скуки попытался воспроизвести:Никаких ошибок нет. К чему бы это?..Код: Выделить всё
Use CONNECT or CREATE DATABASE to specify a database create database "bt.fdb" user "sysdba" password "masterkey"; create table t (n varchar(40), b blob sub_type text); insert into t values ('abc', 'abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi '); delete from t where n='abc' and b='abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi '; show version; ISQL Version: WI-V2.1.1.17910 Firebird 2.1 Server version: Firebird/x86/Windows NT (access method), version "WI-V2.1.1.17910 Firebird 2.1" Firebird/x86/Windows NT (remote server), version "WI-V2.1.1.17910 Firebird 2.1/XNet (SD-ACER7)/P11" Firebird/x86/Windows NT (remote interface), version "WI-V2.1.1.17910 Firebird 2.1/XNet (SD-ACER7)/P11" on disk structure version 11.1 drop database;
WinXP SP2
Firebird-1.5.5.4926
IBExpert 2010.03.25
В Expert-е такой оператор
delete from sqbd where name='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
and sq='select NAME123,12345,1234567,123,9999999999999999999999,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,'
выполняется
Plan
PLAN (SQLT NATURAL)
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
а, если добавить в конце еще '12345,'
то уже ошибка
"Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
"
вот я ничего и не понимаю.....
поле sq - blob.
CREATE TABLE SQBD (
ID INTEGER NOT NULL,
......
SQ BLOB SUB_TYPE 0 SEGMENT SIZE 1024,
......
);
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: ошибка с blob-полем
А назачем у тебя sub_type 0?.. Впрочем и с ним всё нормально:
В-общем, давай воспроизводимый в isql пример. IBExpert - для чайников. Фтопку.
Код: Выделить всё
Use CONNECT or CREATE DATABASE to specify a database
create database "bt.fdb" user "sysdba" password "masterkey";
create table t (n varchar(40), b blob sub_type 0);
insert into t values ('abc', 'abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi ');
delete from t where n='abc' and b='abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi ';
delete from t where n='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
and b='select NAME123,12345,1234567,123,9999999999999999999999,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,';
show version;
ISQL Version: WI-V1.5.2.4731 Firebird 1.5
Firebird/x86/Windows NT (access method), version "WI-V1.5.2.4731 Firebird 1.5"
on disk structure version 10.1
drop database;
Re: ошибка с blob-полем
зачем sub_type не знаю - таблица унаследованная.Dimitry Sibiryakov писал(а):А назачем у тебя sub_type 0?.. Впрочем и с ним всё нормально:Код: Выделить всё
Use CONNECT or CREATE DATABASE to specify a database create database "bt.fdb" user "sysdba" password "masterkey"; create table t (n varchar(40), b blob sub_type 0); insert into t values ('abc', 'abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi '); delete from t where n='abc' and b='abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi '; delete from t where n='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' and b='select NAME123,12345,1234567,123,9999999999999999999999,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,12345,'; show version; ISQL Version: WI-V1.5.2.4731 Firebird 1.5 Firebird/x86/Windows NT (access method), version "WI-V1.5.2.4731 Firebird 1.5" on disk structure version 10.1 drop database;
более того, поскольку с firebird-ом я недавно, то я даже по синтаксису не понимаю что это.
но факт остается фактом! ошибка есть.
а isql и ibexpert одинаково себя в этом плане ведут?