1

我对这种语言相当陌生,我想知道尾调用是否得到了优化。在其他语言中,我可以检查机器代码或中间表示并自己计算出来,但我不知道如何在 PL/SQL 中做到这一点。

提前致谢。

4

1 回答 1

3

在线文档建议不要:

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

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

和:

至少一条路径必须导致终止条件。否则,递归将继续进行,直到 PL/SQL 内存不足并引发预定义的异常 STORAGE_ERROR。

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

你或许可以通过实验来看看它做了什么:编写一个递归函数,以对自身的尾调用结束,并在调用它时观察 Oracle 进程的内存使用情况,或者看看你得到了什么错误信息。看看你是否可以让它在不增加内存的情况下无限期挂起。

于 2009-08-04T18:31:21.773 回答