我正在比较三种Oracle模式。
我想获得每个数据库中使用的所有函数和过程的列表。这可以通过查询吗? (最好包括一个关于它们是否编译的标志)
理想情况下,单个查询带有一个标志,表明函数/过程是否在每个模式中都会很棒。但即使只是第一位也比手动检查每个模式更好。
答案 0 :(得分:92)
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
列STATUS告诉您对象是VALID还是INVALID。如果它无效,你必须尝试重新编译,ORACLE不能告诉你它是否会起作用。
答案 1 :(得分:6)
对dba_arguments,dba_errors,dba_procedures,dba_objects,dba_source,dba_object_size进行描述。 其中每一部分都有部分图片,用于查看程序和功能。
对于包的dba_objects中的object_type也是定义的'PACKAGE'和'PACKAGE BODY'的 身体。
如果要比较同一数据库上的模式,请尝试:
select * from dba_objects
where schema_name = 'ASCHEMA'
and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )
minus
select * from dba_objects
where schema_name = 'BSCHEMA'
and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )
并切换ASCHEMA和BSCHEMA的订单。
如果您还需要查看触发器并比较模式之间的其他内容,您应该查看Article on Ask Tom about comparing schemas
答案 2 :(得分:0)
SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
and owner = 'Schema_name' order by object_name
这里“ Schema_name”是模式的名称,示例我有一个名为PMIS的模式,因此示例将为
SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
and owner = 'PMIS' order by object_name
参考:https://www.plsql.co/list-all-procedures-from-a-schema-of-oracle-database.html