Firebird为什么保留依赖关系?

问题描述 投票:3回答:2

我有一个依赖于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版本。

sql firebird
2个回答
0
投票

也许与Firebird的文件系统缓存有关。

您可以检查此参数:

在数据库级别:强制写入

在firebird.conf中:MaxUnflushedWritesMaxUnflushedWriteTime


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.