2

基本上,我正在创建一个包,它将复制 Oracle Form 的 RecordGroup 函数的过程/函数。我很难模拟这些功能。特别是 RecordGroup(第二维)可以有一个数字或 varchar2(任意长度)列(第三维)。

我在想的是包有一个 3 维关联数组以模拟 oracle 表单程序。

第一维度- 包会话中定义的所有 RecordGroups 的集合。这将是一个由 varchar2 索引的 RecordGroups 表。

2nd Dimension - 这个维度将是 RecordGroup 本身,一个 varray 表,将模拟为记录组的列。该表将由 varchar2 索引,表示列的名称

第三维- 这将是一个数字或 varchar2 的可变数组,其长度特定于列。此可变数组将按其行号进行索引。

我的问题是是否有可能有一个表,例如定义的 RecordGroup,它是一个包含不同数据类型的 varray 的表。如果是这样,关于如何做到这一点的任何想法?如果不可能,无论如何我可以实现定义的行为吗?谢谢!

4

1 回答 1

1

我假设您的意思是给定的记录组包含数字行或字符串行,但不能同时包含两者。在这种情况下:创建 SQL 类型来保存数据并使用多态性为不同的数据类型创建通用记录 grtoup 超类型和特定子类型。

create or replace type record_group_t as object (
     rg_name varchar2(30)
     , rg_type varchar2(6)  -- i.e. number or string
 ) 
not final not instantiable;
/

create or replace type rg_strings_nt as table of varchar2(128);
/

create or replace type rg_numbers_nt as table of number(38,0);
/

create or replace type record_group_string under record_group_t (
    rg_recs rg_strings_nt
)
final instantiable;
/

create or replace type record_group_number under record_group_t (
    rg_recs rg_numbers_nt
)
final instantiable;
/

您可能希望更改特定值,甚至允许更专业的子类型。此外,该record_group_t.rg_type属性可能不是必需的 - 这取决于 yopu 将如何使用这些东西。

然后您的记录组集合 - 第一个维度 - 变得简单:

create or replace type record_group_nt as table of record_group_t;
/

record_group_tYiou 可以在使用 TREAT() 和 CAST()的子类型之间切换。重温 Object developer's guide 以了解更多信息

于 2013-03-27T08:26:26.483 回答