我有一个应用程序来处理各个位置的数据库,我想构建一个检查,使用Firebird 2.5或更高版本打开这些数据库。我们最近从Firebird 2.0迁移到2.5,我们有很多数据库可以响应
select rdb$get_context('SYSTEM','ENGINE_VERSION') as "version" from RDB$DATABASE
使用' SQL错误代码= -804函数未知RDB $ GET_CONTEXT。我猜是因为它们是用Firebird 2.0构建的 - 重建为2.5固定它。
有没有办法检测哪些火鸟服务正在使用哪些可以应用于2.1以上的数据库?
答案 0 :(得分:4)
您的客户或连接API可以告诉您吗?例如,isql's SHOW VERSION
或DBD :: Firebird的ib_database_info?
如果没有,只要想出来,就要探索从最近到最古老的功能。请注意ENGINE_VERSION support was introduced in 2.1,所以检查的内容不多:
SELECT rdb$get_context('SYSTEM','ENGINE_VERSION')... -- ENGINE_VERSION >= 2.1
SELECT * FROM (SELECT ...) fb20; -- derived table -> FB 2.0
SELECT "fb15" FROM rdb$database WITH LOCK; -- LOCK -> FB 1.5
SELECT FIRST ... -- FIRST -> FB 1.0
else abort() -- prehistoric?