我正在比较三个 Oracle 模式。
我想获取每个数据库中使用的所有函数和过程的列表。这可以通过查询吗?(最好包括一个关于它们是否编译的标志)
理想情况下,最好有一个带有标志的查询,该标志说明函数/过程是否在每个模式中。但即使只是第一位也比手动检查每个模式要好。
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')
STATUS 列告诉您对象是 VALID 还是 INVALID。如果它无效,你必须尝试重新编译,ORACLE 无法告诉你它是否会工作。
对 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 的顺序。
如果您还需要查看触发器并比较模式之间的其他内容,您应该查看关于比较模式的 Ask Tom 的文章
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