Параметры и udf

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Параметры и udf

Сообщение _so_ » 16 июн 2005, 11:39

Что-то я не понял. Испольщовать пармаметры для udf нельзя?
Тогда как-то страно орет.

Код: Выделить всё

DECLARE EXTERNAL FUNCTION ASINTEGER
    INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT 'AsInteger' MODULE_NAME 'oeudf.dll'

select * from visualagents
where ID=AsInteger(:AID)
Dynamic SQL Error.
SQL error code = -804.
Data type unknown.
Странно. Почему unknown?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 16 июн 2005, 15:01

А смысл ? Передавать с клиента значение, которое заведомо будет преобразовано

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 16 июн 2005, 15:19

Данный запрос для примеру.
Смысл что не компилировать запрос каждый раз, когда онвыполняется многократно.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 июн 2005, 16:42

Смысл что не компилировать запрос каждый раз, когда онвыполняется многократно.
да вот нету смысла. По уму надо в программе писать

ParamByName('FIELD').asInteger:=...

а не иначе, и не морочить голову ненужными преобразованиями на сервере.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 16 июн 2005, 17:11

Да блин, что вы как всегда обращаете внимание на простые примеры.
Например нужно искать подстроку в блобе.
select * from Table
where PosBlob(Table.FieldBlob, :SubStr ) > 0
Какя я заранее сделаю преобразовнию. Просканию файл БД что ли.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 16 июн 2005, 18:12

В FB2 вот это работает

Код: Выделить всё

SELECT RDB$FIELD_NAME
  FROM RDB$RELATION_FIELDS
 WHERE F_STRPOS(RDB$FIELD_NAME, :s, 0) <> 0

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 июн 2005, 20:31

where PosBlob(Table.FieldBlob, :SubStr ) > 0
Какя я заранее сделаю преобразовнию. Просканию файл БД что ли.
asString не работает? ну сформируй статический запрос вместо параметров. Экономщик - у тебя поиск внутри блоба в тыщи раз медленнее чем твоя экономия на prepare.

_so_
Сообщения: 144
Зарегистрирован: 04 ноя 2004, 22:17

Сообщение _so_ » 17 июн 2005, 09:05

Ошибка возникает на Prepare. Можно искать не только в блобах но и в строках, а также могут быть другие ограничения по другим индексируемым полям. И к тому же это спорно. Если только это не embeded сервер.
Ругаться тогда нормально, что это запрещено, а не неизвестный тип.
Если в FB 2.0 рабоает, это хорошо. Но мне больше нравиться IB.
Если когда-нибудь в FB появится нормальный SS подумаю на него переходить. Это мое личное мнение.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 17 июн 2005, 13:32

_so_ писал(а):Но мне больше нравиться IB.
Пиши в borland. Делай запись в QC. Лет через 5 тебе скажут, почему это плохо и как ты неправ
_so_ писал(а):Если когда-нибудь в FB появится нормальный SS подумаю на него переходить.
А никто и не просит

На вот, почитай на досуге о "нормальном" SS
http://sourceforge.net/mailarchive/foru ... um_id=6330

Ответить