【发布时间】:2018-10-31 06:54:14
【问题描述】:
我想找一个表类型被声明为object_type的表。这些类型是独立的 SQL 类型(不是任何 PL/SQL 包或过程专用的)。
我知道我们可以从all_type_attrs 数据字典视图中获取对象类型元数据信息。但找不到连接的视图
表类型及其对应的对象类型。
【问题讨论】:
-
这个问题和Java语言有什么关系?
我想找一个表类型被声明为object_type的表。这些类型是独立的 SQL 类型(不是任何 PL/SQL 包或过程专用的)。
我知道我们可以从all_type_attrs 数据字典视图中获取对象类型元数据信息。但找不到连接的视图
表类型及其对应的对象类型。
【问题讨论】:
有一个数据字典视图user_coll_types(也有all_coll_types、dba_coll_types),其中包含您需要的信息。 elem_type_name 列具有对象类型,type_name 为您提供定义为该类型的 TABLE 的集合。
所以这个查询会帮助你:
select type_name as table_type_name, coll_type
from user_coll_types
where elem_type_name = 'APC_T'
/
【讨论】:
正如 APC 所说,视图称为 ALL_COLL_TYPES(也存在 DBA/USER 版本)。
请注意,Oracle 以大写形式存储标识符名称,除非被引用。
CREATE TYPE emp_obj_type AS OBJECT (
emp_id NUMBER,
emp_name VARCHAR2 (10));
/
CREATE TYPE emp_tbl_type IS TABLE OF emp_obj_type;
/
SELECT type_name, elem_type_name
FROM all_coll_types
WHERE type_name = 'EMP_TBL_TYPE'
AND elem_type_name = 'EMP_OBJ_TYPE';
【讨论】: