如何找出存储过程最后一次在 Oracle 中修改或编译的时间?

Posted

技术标签:

【中文标题】如何找出存储过程最后一次在 Oracle 中修改或编译的时间?【英文标题】:How do I find out when a stored procedure was last modified or compiled in Oracle? 【发布时间】:2010-09-22 18:45:07 【问题描述】:

我最好寻找一个 SQL 查询来完成此操作,但其他选项也可能有用。

【问题讨论】:

【参考方案1】:
SELECT LAST_DDL_TIME, TIMESTAMP
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'PROCEDURE'
AND OBJECT_NAME = 'MY_PROC';

LAST_DDL_TIME 是最后一次编译。 TIMESTAMP 是最后一次更改。

过程可能需要重新编译,即使它们在依赖项更改时没有更改。

【讨论】:

我找不到 user_objects。运行此查询时发生错误 @Harie - 这是因为这个问题是关于 Oracle,而不是 SQL Server。 LAST_DDL_TIMETIMESTAMP 的描述是否成立?我刚刚重新编译了一个包体(它是无效的):alter package foo compile body reuse settings; 和两列都更新了。其他区别是我查询DBA_OBJECTS(但这不重要吗?)。 @user272735 您使用的是哪个版本的 Oracle?我认为他们在 11 中增强了一些与依赖相关的东西,这可能会改变这一点。 @user272735 在这种情况下,看起来我错了。也许你应该发布一个带有脚本输出的答案。【参考方案2】:
SELECT name, create_date, modify_date 
FROM sys.procedures order by modify_date desc

【讨论】:

【参考方案3】:

以下查询将在 Oracle 中执行

 SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'OBJ_NAME' ;

【讨论】:

@Thilakan - 如果您要查询 ALL_OBJECTS,您应该在 OWNER 上包含一个谓词,否则除了几年前 WW 的回答中的 OBJECT_TYPE 谓词之外,您可能还会得到多行.您可能还应该注意,ALL_OBJECTS 包含当前用户对数据库中的所有对象(而不是DBA_OBJECTS 中的所有对象)拥有权限的所有对象。【参考方案4】:

我在谷歌上搜索特定日期后更改的 PLSQL 包时来到这里,有点类似于上面的问题。 使用上面的 WW.s 答案,我得到了这个查询,以查找任何“最近”更改的对象:

选择 LAST_DDL_TIME、TIMESTAMP、OBJECT_NAME、object_type FROM USER_OBJECTS WHERE -- OBJECT_TYPE IN ('PROCEDURE', 'PACKAGE', 'PACKAGE BODY', 'VIEW', 'FUNCTION') 和 时间戳 > '2019-02-20' 按时间戳顺序排序;

【讨论】:

以上是关于如何找出存储过程最后一次在 Oracle 中修改或编译的时间?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取oracle存储过程返回的多个值。

如何一次在 GitLab 中克隆用户的所有项目?

oracle存储过程基本语法

如何识别 Oracle 中最近更新的记录?

Oracle查看存储过程最后编辑时间

oracle中一张表的字段数值应该是连续的,怎么找出中间中断的数值