匿名块的行为,是否每次在oracle DB中重用时都编译?

匿名块的行为,是否每次在oracle DB中重用时都编译?,oracle,server-side,rdbms,Oracle,Server Side,Rdbms,我正在阅读《Oracle DB概念指南》(11g r2),我刚刚看到了这篇文章8-9 PL/SQL匿名块,在这篇文章中它有一个表,它的名称是匿名块和子程序之间的差异 对于匿名块,concepts是这样写的:“编译时永远重复使用:NO”,当我读到这句话时,我得到了它,但在这句话之后,concepts说了这幅图 我现在很困惑,因为他们说每一次重用都没有编译,但他们再次说与触发器不同,每次加载到内存时都会编译一个匿名块 我对混乱的看法是错的还是对的?我想它的解释很简单,但我不明白:) 谢谢你的帮助 来

我正在阅读《Oracle DB概念指南》(11g r2),我刚刚看到了这篇文章8-9 PL/SQL匿名块,在这篇文章中它有一个表,它的名称是匿名块和子程序之间的差异

对于匿名块,concepts是这样写的:“编译时永远重复使用:NO”,当我读到这句话时,我得到了它,但在这句话之后,concepts说了这幅图

我现在很困惑,因为他们说每一次重用都没有编译,但他们再次说与触发器不同,每次加载到内存时都会编译一个匿名块

我对混乱的看法是错的还是对的?我想它的解释很简单,但我不明白:)

谢谢你的帮助


来源

简单地说:oracle编译匿名块,但将结果保存在SGA的共享池中。例如,如果重新启动服务器,它将需要重新编译

从您的链接查看文档中的更多信息:

Oracle数据库编译PL/SQL块并将其放置在共享数据库中 SGA的池,但它不存储源代码或编译的 数据库中的版本,以便在当前实例之外重用


不经常使用的代码内存不足,因为RAM是一种宝贵且(即使现在)稀缺的资源。他们没有说明结果,但我明白你的意思:)我还有一个问题要问你。例如,在我的匿名块中,我调用了某个过程(带有2个参数),它返回了一些值,oracle是否将所有结果保存在SGA中?