怎么知道oracle中一个存储过程最后一次被编译的时间?
user_objects中的last_ddl_time指的好像是最后一次被createorreplace的时间,我现在想知道存储过程最后一次被编译的时间,比如A调用B引发...
user_objects中的last_ddl_time指的好像是最后一次被create or replace的时间,我现在想知道存储过程最后一次被编译的时间,比如A调用B引发的B的重新编译,这个时间在哪个视图上能够查到?
展开
1个回答
展开全部
个人观点:
1 last_ddl_time就是指最后一次编译的时间。 你认为的create or replace 其实就是一种编译
2 A调用B引发的B的重新编译。
我认为A调用B是不会引起B的编译的。从2个方面解释:
1) 我个人工作经验中没有发现A调用B会让B重新编译。
案例:B中引用了一张表。我将表删除了,编译B。那么B出现了错误。此时我又将表还原了。再去编译A。注意:A中调用B。但是B是错误的。如果调用B让B也编译的话,那么B会编译通过,A没问题。事实上:由于B的错误,导致A编译也错误。可见B并没有编译。
2)存储过程的一个优点是什么?就是一次编译,到处运行。这个编译时比较消耗资源的。从常理上讲,如果每次调用A引发了B的编译,那么存储过程的上述的优点浩然无存。所以从常理推断,A调用B不会引发B的编译。
---------------------------------- -----------------------------------------
早上看到了你昨晚发的信息。尝试了下。你的结论是有一半是正确的。
正确的解释应该是:
1 假设A、B都是正确的 那么调用的时候无需编译;
2 假设A、B是无效的。那么调用的时候会去编译它。
Oracle会自己判断A、B是否有效,再根据情况决定是否去编译。
1 last_ddl_time就是指最后一次编译的时间。 你认为的create or replace 其实就是一种编译
2 A调用B引发的B的重新编译。
我认为A调用B是不会引起B的编译的。从2个方面解释:
1) 我个人工作经验中没有发现A调用B会让B重新编译。
案例:B中引用了一张表。我将表删除了,编译B。那么B出现了错误。此时我又将表还原了。再去编译A。注意:A中调用B。但是B是错误的。如果调用B让B也编译的话,那么B会编译通过,A没问题。事实上:由于B的错误,导致A编译也错误。可见B并没有编译。
2)存储过程的一个优点是什么?就是一次编译,到处运行。这个编译时比较消耗资源的。从常理上讲,如果每次调用A引发了B的编译,那么存储过程的上述的优点浩然无存。所以从常理推断,A调用B不会引发B的编译。
---------------------------------- -----------------------------------------
早上看到了你昨晚发的信息。尝试了下。你的结论是有一半是正确的。
正确的解释应该是:
1 假设A、B都是正确的 那么调用的时候无需编译;
2 假设A、B是无效的。那么调用的时候会去编译它。
Oracle会自己判断A、B是否有效,再根据情况决定是否去编译。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |