首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PL/SQL:三维关联数组,其中最后一个数组可以是数字数组或varchar2数组(具有可变长度)。

PL/SQL:三维关联数组,其中最后一个数组可以是数字数组或varchar2数组(具有可变长度)。
EN

Stack Overflow用户
提问于 2013-03-27 08:01:54
回答 1查看 907关注 0票数 2

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

我的想法是,包有一个三维关联数组,以模拟甲骨文形式的过程。

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

2维-这个维度将是RecordGroup本身,一张表,将模拟作为记录组的列。此表将由表示列名的varchar2索引

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

我的问题是,是否有可能有一个表,如定义的RecordGroup,使之成为一个具有不同数据类型的变种射线表。如果是的话,有什么办法吗?如果不可能,我是否可以实现定义的行为?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 08:26:26

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

代码语言:javascript
运行
复制
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将如何使用这些东西。

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

代码语言:javascript
运行
复制
create or replace type record_group_nt as table of record_group_t;
/

Yiou可以在使用record_group_t ()和CAST()的子类型之间切换。阅读对象开发人员关于找出更多的指南。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15654136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档