1

寻找不包括 oracle 表不可见列的 %RowType 的解决方法。我想要不可见的列,以免在转换期间影响遗留代码,并且能够在新代码中使用 %RowType 或类似的东西来访问所有列。我尝试过的一件事是创建具有完整表结构的类型记录,但它似乎不允许 %Type 引用单个列,即

Type t_Inv_Test Is Record
(
  Test_Column_Vis Varchar2(20),
  Test_Column_Inv  Varchar2(20)
);

无法做到:

Function Qry(p_Test_Val In t_Inv_Test.Test_Column_Vis%Type)
Return t_Inv_Test.Test_Column_Inv%Type;

在查看了其他 Invisible column 问题后,我也在考虑定义一个包含所有列的视图,然后使用 View%Rowtype。做这个的最好方式是什么?谢谢乔

4

1 回答 1

0

“我想要不可见的列,以免在过渡期间影响遗留代码”

这听起来像是基于 Oracle 版本的重新定义的用例。EBR 允许我们在一个实时数据库中维护我们数据模型的两个不同版本。这是 Oracle 提供的一种高度简洁的功能,并且证明了许可成本是合理的(讨论)。

无论如何,在着手手动实现它之前,您绝对应该检查一下。了解更多


“oracle 表是不可编辑的对象。”

是的,实际表格只有一个版本。EBR 能够将表格的不同投影呈现给不同的用户。这个想法是在将列添加到表之前定义一个版本。使用旧版本连接的用户看到没有该列的表格版本;切换到新版本,他们会看到该列。将所有旧版应用程序迁移到新模型后,您可以停用旧版本。

这种魔力是通过视图和触发器实现的,就像您建议的那样,但通过使用 Oracle 内置功能保证了健壮性。

于 2017-11-12T09:54:46.423 回答