sql - 为什么 Firebird 保留依赖关系?

标签 sql firebird

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

这是我正在谈论的一个例子(当然,这不是一个过程的非常现实世界的用法):

-- 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 ; ^

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

现在让我们改变 View :
alter view select_one_view as select 2 as one from rdb$database;

此时,我希望我的过程返回 2。相反,它返回 1。

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

为什么我会希望这发生?我是否希望根据我的观点手动更改每个程序/触发器?似乎这种行为只会造成不被注意的问题。

附言我已经在 V2.5.2.26539 和 V2.5.2.26540 版本中尝试过这个。

最佳答案

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

您可以检查此参数:

在数据库级别:
强制写入

在 firebird.conf 中:
最大未刷新写入次数
最大未刷新写入时间

关于sql - 为什么 Firebird 保留依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417248/

相关文章:

c# - 如何以编程方式创建 Firebird 数据库文件?

delphi - 嵌入式 Firebird/Delphi 会导致防火墙 'hit' 吗?

java - 使用 jaybird 选择结果的数据更改监听器

sql - 计算两点之间的距离时出现轻微不一致

mysql - 如何根据另一列的值在 SQL 选择查询中创建/添加列?

mysql - 使用来自其他表的主键的所有外键填充表

sql - RDB$GET_CONTEXT 和 RDB$SET_CONTEXT 的替代方案

java - 如何使用 LibreOffice 连接到 Firebird

sql - PostgreSQL:为什么这个查询不使用我的索引?

sql - 根据以前的日期查询带有参数的记录