Oracle Forms 的虚拟列问题
Virtual Column Issue with Oracle Forms
我有一个使用 Oracle Forms 创建的界面。它有一个 base table block
,其中有一个字段(即 col3
" 与派生自 的 table 的列同名") .
Form 有两个其他字段 col1
和 col2
作为数字类型,这些字段也是具有上述 col3
列的相同 table 的成员。
我将 col3
转换为虚拟列作为 table 定义中的 col1
和 col2
列的总和 ( col3 number generated always as (nvl(col1,0)+nvl(col2,0)) virtual
)
当我尝试在基础 table 中提交更改时,它会抛出错误消息
ORA-54013: INSERT operation disallowed on virtual columns
我知道将 DML 应用于虚拟列没有任何意义,但即使我更改了 col3
字段的
Query Only
属性 从 No
到 Yes
Update Allowed
属性 从 Yes
到 No
Insert Allowed
属性 从 Yes
到 No
我收到相同的错误消息。我不想写明确的 DML 语句,因为表单有很多其他字段,它们也应该列在这些语句中。
您知道如何在不放弃 base table block
结构的情况下解决这个问题吗? (我使用的是 Fusion Middleware 11g 版本)
因为您对该列所做的一切都是查询,如何将其设置为非数据库列?不过,它需要编写一个 POST-QUERY
触发器 - 否则在执行查询后您将看不到它的值。
:block.col3 := :block.col1 + :block.col2;
将相同的代码放入 :block.col1
和 :block.col2
项的 WHEN-VALIDATE-ITEM
触发器中,以便在 inserting/updating 值时计算结果。
或者,创建一个 过程(在表单内),将上面的代码放入其中,然后从那些触发器中调用过程 - 从长远来看,这可能是更好的选择,因为您只需要在过程中维护代码更改。
我有一个使用 Oracle Forms 创建的界面。它有一个 base table block
,其中有一个字段(即 col3
" 与派生自 的 table 的列同名") .
Form 有两个其他字段 col1
和 col2
作为数字类型,这些字段也是具有上述 col3
列的相同 table 的成员。
我将 col3
转换为虚拟列作为 table 定义中的 col1
和 col2
列的总和 ( col3 number generated always as (nvl(col1,0)+nvl(col2,0)) virtual
)
当我尝试在基础 table 中提交更改时,它会抛出错误消息
ORA-54013: INSERT operation disallowed on virtual columns
我知道将 DML 应用于虚拟列没有任何意义,但即使我更改了 col3
字段的
Query Only
属性 从No
到Yes
Update Allowed
属性 从Yes
到No
Insert Allowed
属性 从Yes
到No
我收到相同的错误消息。我不想写明确的 DML 语句,因为表单有很多其他字段,它们也应该列在这些语句中。
您知道如何在不放弃 base table block
结构的情况下解决这个问题吗? (我使用的是 Fusion Middleware 11g 版本)
因为您对该列所做的一切都是查询,如何将其设置为非数据库列?不过,它需要编写一个 POST-QUERY
触发器 - 否则在执行查询后您将看不到它的值。
:block.col3 := :block.col1 + :block.col2;
将相同的代码放入 :block.col1
和 :block.col2
项的 WHEN-VALIDATE-ITEM
触发器中,以便在 inserting/updating 值时计算结果。
或者,创建一个 过程(在表单内),将上面的代码放入其中,然后从那些触发器中调用过程 - 从长远来看,这可能是更好的选择,因为您只需要在过程中维护代码更改。