Функция UDF Firebird STRTOINT не определена в запросе, даже если она указана в RDB $ FUNCTIONS - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь запустить SQL-запрос в моей базе данных Firebird. Я восстановил резервную копию в моей локальной среде разработки.

Моя ошибка следующая:

echo "SELECT STRTOINT('3') FROM MyTable;" | isql-fb /var/lib/firebird/3.0/data/dbname.fdb
Statement failed, SQLSTATE = 39000
invalid request BLR at offset 36
-function STRTOINT is not defined
-module name or entrypoint could not be found

Чтобы проверить, существует ли функция, я запускаю это:

echo 'SELECT RDB$FUNCTION_NAME FROM RDB$FUNCTIONS;' | isql-fb /var/lib/firebird/3.0/data/dbname.fdb  | grep STRTOINT
STRTOINT

Как правильно вызвать функцию? Любые советы приветствуются!

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Тот факт, что UDF определен в базе данных, не означает, что UDF существует . Для пользовательских функций требуется как определение в базе данных, так и собственная библиотека (.dll / .so) на диске, содержащая код для функции UDF.

Ошибка означает, что либо

  • UDF не существует ни в одной из найденных библиотек,
  • Firebird не имеет права на чтение библиотеки,
  • Папка, содержащая библиотеку, не определена в firebird.conf (настройка UdfAccess)
  • Библиотека UDF является 32-битной, а Firebird - 64-битной (или наоборот)

См. Также неверный запрос BLR по смещению 163

У самого Firebird нет UDF с именем STRTOINT, поэтому вам нужно выяснить, какая это сторонняя библиотека, и правильно установить ее.

2 голосов
/ 21 марта 2019

Вы пытались сделать следующее?

CAST(MyVarcharCol AS INT)

Подробнее: http://www.firebirdfaq.org/faq139/

...