Oracle Forms 的虚拟列问题

Virtual Column Issue with Oracle Forms

我有一个使用 Oracle Forms 创建的界面。它有一个 base table block,其中有一个字段(即 col3" 与派生自 的 table 的列同名") .

Form 有两个其他字段 col1col2 作为数字类型,这些字段也是具有上述 col3 列的相同 table 的成员。

我将 col3 转换为虚拟列作为 table 定义中的 col1col2 列的总和 ( col3 number generated always as (nvl(col1,0)+nvl(col2,0)) virtual )

当我尝试在基础 table 中提交更改时,它会抛出错误消息

ORA-54013: INSERT operation disallowed on virtual columns

我知道将 DML 应用于虚拟列没有任何意义,但即使我更改了 col3 字段的

我收到相同的错误消息。我不想写明确的 DML 语句,因为表单有很多其他字段,它们也应该列在这些语句中。

您知道如何在不放弃 base table block 结构的情况下解决这个问题吗? (我使用的是 Fusion Middleware 11g 版本)

因为您对该列所做的一切都是查询,如何将其设置为非数据库列?不过,它需要编写一个 POST-QUERY 触发器 - 否则在执行查询后您将看不到它的值。

:block.col3 := :block.col1 + :block.col2;

将相同的代码放入 :block.col1:block.col2 项的 WHEN-VALIDATE-ITEM 触发器中,以便在 inserting/updating 值时计算结果。

或者,创建一个 过程(在表单内),将上面的代码放入其中,然后从那些触发器中调用过程 - 从长远来看,这可能是更好的选择,因为您只需要在过程中维护代码更改。