PL / SQL是否执行尾调用优化?

时间:2009-08-04 18:03:12

标签: oracle plsql tail-recursion intermediate-language tail-call-optimization

我对这门语言还不熟悉,我想知道尾调用是否已经过优化。在其他语言中,我可以检查机器代码或中间表示并自己计算,但我不知道如何在PL / SQL中执行此操作。

提前致谢。

1 个答案:

答案 0 :(得分:3)

在线文档建议不要:

http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884

  

每次递归调用都会创建一个新的   在...中声明的任何项的实例   子程序,包括参数,   变量,游标和异常。   同样,SQL的新实例   在每个级别创建语句   在递归下降。

  

至少有一条路必须通向a   终止条件。否则,   递归将持续到PL / SQL   内存耗尽并提高了   预定义的异常STORAGE_ERROR。

如果尾部调用优化可用,它将不会耗尽存储空间(但如果让它运行太久,可能会超时一些。)

您可以通过实验查看它的作用:编写一个递归函数,该函数以对自身的尾调用结束,并在调用时查看Oracle进程的内存使用情况,或查看您获得的错误消息。看看你是否可以在不增加内存的情况下无限期地挂起它。

相关问题