我对这门语言还不熟悉,我想知道尾调用是否已经过优化。在其他语言中,我可以检查机器代码或中间表示并自己计算,但我不知道如何在PL / SQL中执行此操作。
提前致谢。
答案 0 :(得分:3)
在线文档建议不要:
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884
每次递归调用都会创建一个新的 在...中声明的任何项的实例 子程序,包括参数, 变量,游标和异常。 同样,SQL的新实例 在每个级别创建语句 在递归下降。
和
至少有一条路必须通向a 终止条件。否则, 递归将持续到PL / SQL 内存耗尽并提高了 预定义的异常STORAGE_ERROR。
如果尾部调用优化可用,它将不会耗尽存储空间(但如果让它运行太久,可能会超时一些。)
您可以通过实验查看它的作用:编写一个递归函数,该函数以对自身的尾调用结束,并在调用时查看Oracle进程的内存使用情况,或查看您获得的错误消息。看看你是否可以在不增加内存的情况下无限期地挂起它。