Oracle表单的虚拟列问题

时间:2019-01-13 19:59:36

标签: oracle oracleforms virtual-column

我有一个使用Oracle Forms创建的接口。它有一个base table block,其中有一个字段(即col3与表列的名称同”同名)。

表单具有其他两个数字类型的字段col1col2,这些字段也是具有上述col3列的同一表的成员。

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

当我尝试在基表中提交更改时,它会显示错误消息

  

ORA-54013 不允许在虚拟列上执行INSERT操作

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

  • Query Only属性从NoYes

  • Update Allowed属性从YesNo

  • Insert Allowed属性从YesNo

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

您是否知道如何在不放弃base table block结构的情况下克服此问题? (我使用的是Fusion Middleware 11g版本

1 个答案:

答案 0 :(得分:1)

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

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

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

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