我使用 LibreOffice Base 创建每周报告。我有一张表(名为time_spent
),其中包含大量规范化数据,我正在使用视图进行生成所需报告所需的处理。
我每周都会向该表添加新数据,并且我只想导出该周的最新报告。
无需重新创建用于创建报告的所有视图每一个周,我希望创建一个名为的视图time_spent_selection
,本质上是SELECT * FROM "time_spent" WHERE "week" = '2015-04'
,并使用它来组合所有后续视图。这样每周只需更改该WHERE
子句并自动获取正确周的报告。
但是,LibreOffice 基础版拒绝保存对time_spent_selection
视图所做的任何更改,并显示以下错误消息:
表被视图引用:语句 [DROP VIEW "time_spent_selection"] 中的错误
这是其定义中bugs
引用的观点之一。time_spent_selection
问题:
我如何强制修改该视图(其他视图依赖该视图)?
我明白 - 如果可能的话 - 所有视图都必须重新计算,这正是我想要的。
答案1
这可能是后端数据库的限制,默认情况下是 HyperSQL 数据库 (HSQLDB) 版本 1.8 - 如果您使用默认后端,则文档位于http://www.hsqldb.org/doc/1.8/guide/ch09.html并且没有 ALTER VIEW 或 REPLACE VIEW 之类的功能。您必须使用 DROP VIEW,这仅在没有依赖项的情况下才允许。
您可以选择升级到当前版本的 HSQLDB(版本 2.3),该版本支持 ALTER VIEW 语句(http://hsqldb.org/doc/guide/guide.html#dbc_view_creation)。GUI 可能仍然不支持事务,但您可以使用工具->SQL 窗口直接向数据库发出 ALTER VIEW 命令。有关如何将数据库组件升级到版本 2.3 的说明位于此论坛主题中:[教程] 拆分“嵌入式 HSQL 数据库”
或者,不要将特定日期硬编码到视图的 SQL 中,而是让视图引用该日期的筛选器/虚拟表。然后,您只需打开单列单行的“reportDate”表并每周更改其中的日期,而无需触及视图。