可以得到该包的程序和功能,以及对象类型(成员函数),从all_procedures
:
select ao.owner, ao.object_type, ao.object_name, ap.procedure_name
from all_objects ao
left join all_procedures ap
on ap.owner = ao.owner
and ap.object_name = ao.object_name
where ao.owner in (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'OLAPDBA', 'OLAPSVR', 'OLAP_USER',
'OLAPSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM')
and ao.object_type in ('PACKAGE', 'TYPE')
order by ao.owner, ao.object_type, ao.object_name, ap.procedure_name;
OWNER OBJECT_TYPE OBJECT_NAME PROCEDURE_NAME
------------------------------ ------------------- ------------------------------ ------------------------------
DBSNMP PACKAGE DM_FMTLIB MGMT_DM_GEN_AC
DBSNMP PACKAGE DM_FMTLIB MGMT_DM_GEN_AC_FH
DBSNMP PACKAGE DM_FMTLIB MGMT_DM_GEN_AC_FS
DBSNMP PACKAGE DM_FMTLIB MGMT_DM_GEN_ANYC
...
如果你想显示的参数,如果只载程序区分,你可以加入到all_arguments
。但不知道如何管理,这将是:
select ao.object_type
||' '|| ao.owner ||'.'|| ao.object_name
|| case when ap.procedure_name is not null then
'.'|| ap.procedure_name
|| case when count(aa.argument_name) > 0 then
'('|| listagg(aa.argument_name, ',')
within group (order by position) ||')'
end
end as object_info
from all_objects ao
left join all_procedures ap
on ap.owner = ao.owner
and ap.object_name = ao.object_name
and ap.object_id = ao.object_id
left join all_arguments aa
on aa.owner = ap.owner
and aa.object_name = ap.procedure_name
and aa.object_id = aa.object_id
and aa.subprogram_id = ap.subprogram_id
where ao.owner in (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'OLAPDBA', 'OLAPSVR', 'OLAP_USER',
'OLAPSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM')
and ao.object_type in ('PACKAGE', 'TYPE')
and ao.object_name = 'DBMS_OUTPUT'
group by ao.object_type, ao.owner, ao.object_name, ap.procedure_name,
ao.object_id, ap.subprogram_id
order by ao.owner, ao.object_type, ao.object_name, ap.procedure_name;
我仅仅限于显示DBMS_OUTPUT
为例:
OBJECT_INFO
-----------------------------------------------------------------------------------
PACKAGE SYS.DBMS_OUTPUT.DISABLE
PACKAGE SYS.DBMS_OUTPUT.ENABLE(BUFFER_SIZE,LOG_TYPE,LOG_TARGET,LOG_LEVEL)
PACKAGE SYS.DBMS_OUTPUT.GET_LINE(FILE,ID,LINE,BUFFER,DATATYPE,STATUS,BYTE_MODE,LEN)
PACKAGE SYS.DBMS_OUTPUT.GET_LINES(LINES,NUMLINES)
PACKAGE SYS.DBMS_OUTPUT.GET_LINES(LINES,NUMLINES)
PACKAGE SYS.DBMS_OUTPUT.NEW_LINE
PACKAGE SYS.DBMS_OUTPUT.PUT(A)
PACKAGE SYS.DBMS_OUTPUT.PUT_LINE(A)
PACKAGE SYS.DBMS_OUTPUT
,还是显示返回类型功能:
select ao.object_type
||' '|| ao.owner ||'.'|| ao.object_name
|| case when ap.procedure_name is not null then
'.'|| ap.procedure_name
|| case when count(aa.argument_name) > 0 then
'('|| listagg(aa.argument_name, ',')
within group (order by position) ||')'
end
|| case when min(aa.position) = 0 then ' RETURN '
|| max(case when position = 0 then aa.pls_type end) end
end as object_info
...
对于DBMS_RANDOM
:
PACKAGE SYS.DBMS_RANDOM.INITIALIZE(VAL)
PACKAGE SYS.DBMS_RANDOM.NORMAL RETURN NUMBER
PACKAGE SYS.DBMS_RANDOM.RANDOM RETURN BINARY_INTEGER
PACKAGE SYS.DBMS_RANDOM.SEED(VAL)
PACKAGE SYS.DBMS_RANDOM.SEED(VAL)
PACKAGE SYS.DBMS_RANDOM.STRING(OPT,LEN) RETURN VARCHAR2
PACKAGE SYS.DBMS_RANDOM.TERMINATE
PACKAGE SYS.DBMS_RANDOM.VALUE RETURN NUMBER
PACKAGE SYS.DBMS_RANDOM.VALUE(LOW,HIGH) RETURN NUMBER
PACKAGE SYS.DBMS_RANDOM
不管你想要什么,你都可以很明显地格式化信息,使用数据类型而不是参数名等,所以这只是一个起点。
我怀疑有任何描述,甚至任何地方的评论。这给了你很多东西来使复选框不起作用,并为它写描述。引用the documentation似乎更明智,但取决于您想要对信息做什么。
难道你不能指出人们[包和类型参考文档](http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm)(或[PDF版本](http://docs.oracle.com/cd/E11882_01/appdev.112/e40758.pdf))?你可以从数据字典中获得程序和函数,甚至是参数,但是我怀疑描述存储在任何地方。 –
该手册中的概述是正确的:http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/intro.htm#i1010103 –
我知道这些信息在手册中。但我有一个应用程序显示这些信息,他们需要复选框来说明是否使用它,这对于我构建的应用程序非常重要。而不是将手册中的所有信息输入到表格中,所以我想使用select语句。 – nightfox79