Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> containing с параметром 
V
    Опции темы
Akella
  Дата 3.12.2009, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Код

CREATE TABLE PHONES (
    ID           "INT" NOT NULL /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    TEL          STRING20 COLLATE PXW_CYRL /* STRING20 = VARCHAR(20) */,
    ID_APART     "INT" /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    ID_ARENDA    "INT" /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    ID_OFF       "INT" /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    ID_MEDIATOR  "INT" /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    EXP          BOOL COLLATE PXW_CYRL /* BOOL = VARCHAR(1) DEFAULT 'F' */,
    CONTACT      STRING110 COLLATE PXW_CYRL /* STRING110 = VARCHAR(110) */,
    LAS          "_DATE" /* "_DATE" = DATE */,
    LAS_COUNT    BIGINNT /* BIGINNT = BIGINT */
);

Обратите внимание, что поле TEL 20 символов (для номера телефонов хватает)


Есть запрос (с параметром). В качестве параметра передаю строку: 80623111220,80623111220,80623111220
Код

select * from phones p
where
(',' || :phones || ',' containing ',' || p.tel || ',')


ошибка:
Цитата

Incompatible column/host variable data type.
Dynamic SQL Error.
SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.

------ Performance info ------
Prepare time = 0ms
Execute time = 31ms
Current memory = 2 437 224
Max memory = 2 639 724
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 16 840



Если в качестве параметра передавать значение меньшее или равное 20-ти символам, то ошибки нет.




ТЕПЕРЬ:
Есть запрос БЕЗ параметра (и строка содержит > 20 символов)
Код

select * from phones p
where
(',' || '80623111220,80623111220,80623111220' || ',' containing ',' || p.tel || ',')

Выполняется БЕЗ ошибок

Цитата

План
PLAN (P NATURAL)

------ Performance info ------
Prepare time = 0ms
Execute time = 32ms
Avg fetch time = 32,00 ms
Current memory = 2 451 484
Max memory = 2 639 724
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 16 840


Результат одинаковый, что в программе, что в IBExpert

Что не так?

Firebird 2.0.5

Это сообщение отредактировал(а) Akella - 3.12.2009, 01:00
PM MAIL   Вверх
Frees
Дата 3.12.2009, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Код

select * from phones p
where
(',' || cast(:phones as varchar(4096)) || ',' containing ',' || p.tel || ',')


теперь можеш передать 4096 смволов

суть проблемы - приведение параметра к типу

Это сообщение отредактировал(а) Frees - 3.12.2009, 07:47


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 3.12.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Да, это подсказали и на другом форуме. smile

Добавлено через 35 секунд
Но я заранее не знаю, какое количество символов может быть передано.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.