加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 什么是类型的子对象?

发布时间:2020-12-12 13:15:14 所属栏目:百科 来源:网络整理
导读:在all_objects中有一个名为SUBOBJECT_NAME的列,文档说这是: Name of the subobject (for example,partition) 如果您执行以下查询: select * from all_objects where owner = 'MDSYS' and object_name = 'SDO_TGL_OBJECT_ARRAY' 您发现MDSYS.SDO_TGL_OBJECT
在all_objects中有一个名为SUBOBJECT_NAME的列,文档说这是:

Name of the subobject (for example,partition)

如果您执行以下查询:

select * 
  from all_objects
 where owner = 'MDSYS' 
   and object_name = 'SDO_TGL_OBJECT_ARRAY'

您发现MDSYS.SDO_TGL_OBJECT_ARRAY有一个名为$VNS_1的子对象.它是什么?类型如何具有子对象?

解决方法

有时文档意味着它所说的内容.

举例来说,我有一个名为RANGE_PART_INTERVAL_TABLE的表,它有三个分区.我对ALL_OBJECTS运行相关查询,然后!

SQL> select object_name,object_type,subobject_name
  2  from all_objects
  3  where object_name = 'RANGE_PART_INTERVAL_TABLE'
  4  /

OBJECT_NAME                    OBJECT_TYPE         SUBOBJECT_NAME
------------------------------ ------------------- ---------------
RANGE_PART_INTERVAL_TABLE      TABLE
RANGE_PART_INTERVAL_TABLE      TABLE PARTITION     SYS_P60
RANGE_PART_INTERVAL_TABLE      TABLE PARTITION     SYS_P61
RANGE_PART_INTERVAL_TABLE      TABLE PARTITION     SYS_P62

SQL>

我认为问题是使用“对象”这个词. Oracle来自面向对象编程之前的一段时间(如果你能想象这样的话).它的数据字典使用“数据库对象”来表示“事物” – 表,视图,序列,过程等.当Oracle将OOP引入数据库时??,它使用关键字TYPE来获取这些新东西.因此,视图ALL_OBJECTS是您的架构拥有权限的所有内容的列表,而不仅仅是用户定义的类型.

编辑

需要明确的是,这与类型继承无关.

SQL> create type my_type as object (attr1 number) not final
  2  /

Type created.

SQL> create type my_sub_1 under my_type (attr2 date)
  2  /

Type created.

SQL> select object_name,subobject_name
  2  from all_objects
  3  where object_name = 'MY_TYPE'
  4  /

OBJECT_NAME                    OBJECT_TYPE         SUBOBJECT_NAME
------------------------------ ------------------- ---------------
MY_TYPE                        TYPE

SQL>

USER / ALL / DBA_TYPES视图显示了Inheritence,它显示了派生类型的超类型:…

SQL> select type_name,supertype_name
  2  from all_types
  3  where type_name in ('MY_TYPE','MY_SUB_1')
  4  /

TYPE_NAME                      SUPERTYPE_NAME
------------------------------ ------------------------------
MY_SUB_1                       MY_TYPE
MY_TYPE

SQL>

EDIT2

TheCoop指出:

types can’t have partitions

在特定情况下,他们引用$VNS_1是Type Evolution的人工制品.当我们在使用Type之后执行ALTER TYPE时,Oracle会创建它的一个版本.我们可以在%_TYPE_VERSIONS视图中看到这个….

SQL> select * from dba_type_versions
  2  where owner = 'MDSYS'
  3  and type_name = 'SDO_TGL_OBJECT_ARRAY'
  4  /

OWNER                          TYPE_NAME                        VERSION#
------------------------------ ------------------------------ ----------
TYPECODE                       STATUS        LINE
------------------------------ ------- ----------
TEXT
------------------------------------------------------------------------------
HASHCODE
----------------------------------
MDSYS                          SDO_TGL_OBJECT_ARRAY                    1
COLLECTION                     VALID            1
type SDO_TGL_OBJECT_ARRAY
61EB9AEC10198F71C141D13B32F52C00A8

MDSYS                          SDO_TGL_OBJECT_ARRAY                    1
COLLECTION                     VALID            2
                                        as VARRAY (1000000) of SDO_TGL_OBJECT
61EB9AEC10198F71C141D13B32F52C00A8

MDSYS                          SDO_TGL_OBJECT_ARRAY                    2
COLLECTION                     VALID            1
type SDO_TGL_OBJECT_ARRAY
6184209BAEF1F731B937760C2BA8B45688

MDSYS                          SDO_TGL_OBJECT_ARRAY                    2
COLLECTION                     VALID            2
                                        as VARRAY (1000000) of SDO_TGL_OBJECT
6184209BAEF1F731B937760C2BA8B45688

MDSYS                          SDO_TGL_OBJECT_ARRAY                    2
COLLECTION                     VALID            3
  alter type SDO_TGL_OBJECT_ARRAY modify limit 10000000 cascade
6184209BAEF1F731B937760C2BA8B45688


SQL>

Find out more.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读