为什么Firebird会保留依赖关系?

时间:2015-02-09 19:00:08

标签: sql firebird

我的程序依赖于我的Firebird数据库中的视图。今天,我改变了视图,通过这样做,我希望解决我的程序中的错误。然后我发现(经过大约一个小时的挫折),我的程序仍在使用以前版本的视图。

这是我正在谈论的一个例子(授予,它不是一个非常真实的程序用法):

-- Create a view
create view select_one_view as select 1 as one from rdb$database;

-- Create a procedure that selects from my view
SET TERM ^ ;

create procedure select_from_view
returns (number integer) as
begin
    select one from select_one_view into :number;
    suspend;
end^

SET TERM ; ^

所以现在我的程序取决于视图。当我执行此过程(execute procedure select_from_view)时,它会按预期返回1。

现在让我们改变观点:

alter view select_one_view as select 2 as one from rdb$database;

此时,我希望我的程序返回2.相反,它返回1.

作为一个完整性检查,我尝试在SQL Server中做同样的事情,但它按照我的预期工作,在我改变视图后返回2。

为什么世界上我希望这种情况发生?我是否希望手动更改依赖于我的视图的每个过程/触发器?看起来这种行为似乎只会产生未被注意的问题。

P.S。我已尝试使用版本V2.5.2.26539和V2.5.2.26540。

2 个答案:

答案 0 :(得分:0)

可能与Firebird的文件系统缓存有关。

您可以检查以下参数:

在数据库级别:
强制写入

firebird.conf中的


MaxUnflushedWrites
MaxUnflushedWriteTime

答案 1 :(得分:0)

这是由于元数据缓存。您可能需要断开数据库的所有附件的连接并重新连接。这适用于SuperServer模式,Classic和SuperClassic模式不跨附件共享缓存。