0

使用来自数据字典表示的信息,获取有关给定包中声明的所有类型数据的信息。

NAME            |   TYPE                |   PACKAGE
----------------------------------------------------
T_ASSOCIATIVE   |   ASSOCIATIVE ARRAY   |   MY_TYPES
T_TABLE_TYPE    |   NESTED TABLE        |   MY_TYPES
T_CURSOR_TYPE   |   EREFCURSOR          |
...

该程序应以匿名块的形式发布。

1) desc package_name;

没有变体来获取某些行,只需解析:此类任务的错误做法

2)

select * from user_types;
select * from user_type_attrs;
select * from user_type_methods;
select * from user_procedures;
select * from user_source;

没有得到任何结果,只有包类型,但没有在这个包中声明的类型

4

1 回答 1

0

您可以在视图中看到 PL/SQL 类型all_plsql_types

SQL>  > desc all_plsql_types
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 OWNER                                                             NOT NULL VARCHAR2(128)
 TYPE_NAME                                                                  VARCHAR2(136)
 PACKAGE_NAME                                                      NOT NULL VARCHAR2(128)
 TYPE_OID                                                          NOT NULL RAW(16)
 TYPECODE                                                                   VARCHAR2(58)
 ATTRIBUTES                                                                 NUMBER
 CONTAINS_PLSQL                                                             VARCHAR2(3)

...或者如果您愿意,可以使用dba_or版本。user_


该视图仅在 12c 中可用。在 11gR2 中,如果您启用了PL/Scope ,您可以all_identifiers视图中提取该信息:

SQL> desc all_identifiers;

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 NAME                                               VARCHAR2(30)
 SIGNATURE                                          VARCHAR2(32)
 TYPE                                               VARCHAR2(18)
 OBJECT_NAME                               NOT NULL VARCHAR2(30)
 OBJECT_TYPE                                        VARCHAR2(13)
 USAGE                                              VARCHAR2(11)
 USAGE_ID                                           NUMBER
 LINE                                               NUMBER
 COL                                                NUMBER
 USAGE_CONTEXT_ID                                   NUMBER

...或者如果您愿意,可以使用 dba_ 或 user_ 版本。

快速演示:

alter session set PLSCOPE_SETTINGS='IDENTIFIERS:ALL';

create package my_types as
  type T_ASSOCIATIVE is table of number index by pls_integer;
  type T_TABLE_TYPE is table of number;
  type T_CURSOR_TYPE is ref cursor;
end my_types;
/

select name, type
from user_identifiers
where object_name = 'MY_TYPES'
and usage = 'DECLARATION'
and type != 'PACKAGE'
order by name;

NAME                           TYPE              
------------------------------ ------------------
T_ASSOCIATIVE                  INDEX TABLE       
T_CURSOR_TYPE                  REFCURSOR         
T_TABLE_TYPE                   NESTED TABLE      

您可能需要重新编译现有对象;通过重新创建它们或使用以下方式减少干扰alter package

alter session set PLSCOPE_SETTINGS='IDENTIFIERS:ALL';

alter package my_types compile;
于 2019-09-24T09:52:51.440 回答