1

我正在尝试在我的 Firebird 数据库中运行 SQL 查询。我已经在本地开发环境中恢复了备份。

我的错误如下:

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

如何正确调用函数?欢迎任何提示!

4

2 回答 2

3

UDF 在数据库中定义的事实并不意味着 UDF存在。UDF 既需要数据库中的定义,也需要磁盘上包含 UDF 函数代码的本地库 (.dll/.so)。

该错误意味着

  • UDF 不存在于找到的任何库中,
  • 火鸟无权读取图书馆,
  • 包含库的文件夹未在firebird.conf(设置UdfAccess)中定义
  • UDF 库是 32 位的,而 Firebird 是 64 位的(反之亦然)

另请参见偏移量 163 处的无效请求 BLR

Firebird 本身没有 UDF 调用STRTOINT,所以你需要找出这是哪个第三方库,并正确安装。

于 2019-03-21T15:31:19.383 回答
2

您是否尝试过以下操作?

CAST(MyVarcharCol AS INT)

阅读更多:http ://www.firebirdfaq.org/faq139/

于 2019-03-21T14:35:24.813 回答