如何找出存储过程最后一次在 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_TIME
和TIMESTAMP
的描述是否成立?我刚刚重新编译了一个包体(它是无效的):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 中修改或编译的时间?的主要内容,如果未能解决你的问题,请参考以下文章