当视图用于显示Oracle Apex中的现有记录时,如何在表中更新或创建新记录?

时间:2020-05-13 07:49:47

标签: oracle oracle-apex

我创建了一个页面,其中在组织俱乐部旁边显示事件数据。由于事件和俱乐部存储在不同的表中,因此我创建了一个视图,该视图结合了两个表中的记录。页面的报告部分工作正常。但是,在创建新事件和更新事件时,我遇到了错误。 enter image description here

当我创建页面时,我选择了event_id和其他不必要的俱乐部列,这些列不包含在报表中,也没有包含在表单中

enter image description here

我认为正在发生错误,因为我使用的是数据视图而不是实际的表。我该如何解决这个问题。

另外,当我使用实际表获取数据时,因为我没有在表单中包含“ event_id”列(因为我不希望在报表或表单中出现不可更改的主键),所以它给我一些错误,指出我无法在'event_id'列中插入空值。我也该如何解决这个问题?

视图表的SQL脚本如下所示。

create or replace view "V_EVENT" as
SELECT event.*, club_name
FROM event
LEFT JOIN (club_event INNER JOIN club ON club_event.club_id = club.club_id)
ON event.event_id = club_event.event_id

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将视图用作表更新的代理,但正如错误所建议的那样,它们必须保持键值不变。

这意味着您至少应该在视图中选择主键,并且不要在失去该PK唯一性的任何地方加入。

有时它会因为存在歧义而抱怨,例如缺少外键约束。探索了更多示例here

您仍然可以在APEX中包括这些重要的列,以便您可以在元数据中相应地将它们定义为主键,只需将它们设置为“隐藏”即可。

但是您仍然需要为新记录设置该值,例如计算,触发器或使用identity column