寻求解决方法使%RowType不适用于oracle不可见列

时间:2017-11-12 00:57:26

标签: oracle invisible rowtype refactoring-databases

寻找%RowType的解决方法,不包括oracle table Invisible columns。我想要不可见的列,以便在转换期间不影响遗留代码,并且能够在新代码中使用%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列问题之后,我还在考虑使用所有列定义视图,然后使用View%Rowtype。 做这个的最好方式是什么? 谢谢 乔

1 个答案:

答案 0 :(得分:0)

  

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

这听起来像是基于Oracle Edition的Redefinition的用例。 EBR允许我们在一个实时数据库中维护两个不同版本的数据模型。它是Oracle提供的一种非常简洁的功能,可以证明许可证成本(讨论)。

无论如何,在你开始自己动手实施它之前,你一定要检查一下。 Find out more

  

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

是的,实际表只有一个版本。 EBR启用的是表格的不同投影的表示给不同的用户。您的想法是在将列添加到表之前定义版本。使用旧版本连接的用户可以看到没有列的表格版本;切换到新版本,他们看到了专栏。将所有旧版应用迁移到新模型后,您可以淘汰旧版本。

这种魔力是通过视图和触发器实现的,就像你提议的那样,但是使用Oracle内置功能可以保证稳健性。