基本上,我正在创建一个包,它将复制Oracle的RecordGroup函数的过程/函数。我很难模拟这些功能。特别是当一个RecordGroup (二维)可以有一个数字或varchar2(任何长度)列(第3维)。
我的想法是,包有一个三维关联数组,以模拟甲骨文形式的过程。
第1维-在包会话中定义的所有RecordGroups集合。这将是一个由RecordGroups索引的varchar2表。
2维-这个维度将是RecordGroup本身,一张表,将模拟作为记录组的列。此表将由表示列名的varchar2索引
三维-这将是一个V数组的数字或varchar2的长度特定于一列。此varray将按其行号进行索引。
我的问题是,是否有可能有一个表,如定义的RecordGroup,使之成为一个具有不同数据类型的变种射线表。如果是的话,有什么办法吗?如果不可能,我是否可以实现定义的行为?谢谢!
发布于 2013-03-27 08:26:26
我假设您的意思是一个给定的记录组包含数字行或字符串行,而不是两者的混合。在这种情况下:创建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;
/
Yiou可以在使用record_group_t
()和CAST()的子类型之间切换。阅读对象开发人员关于找出更多的指南。
https://stackoverflow.com/questions/15654136
复制相似问题