前置声明解决相互递归时的PLS-00313
2018-02-11 23:33
477 查看
碰到了一个互相递归的情况,在一个存储过程中,函数A需要调用B,同时函数B也需要调用A,此时发生了PLS-00313: XXXX not declared in this scope的错误。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/30/cb4e08aa9213a30d9b340a9cc84c5420)
原因很直接,在编译函数F_A时,发现F_B函数没有声明过,报错!
此时陷入了一个死循环,先放F_B函数,也会因为F_A函数未声明而报错,幸好PLSQL已经考虑到了这种偶发情况,解决的方法是“前置声明”。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/30/1897fa6d06a9e14314e708f81d347d14)
即在F_A前面再加一条F_B的声明,但不包含具体的定义。这下编译就通过了。
原因很直接,在编译函数F_A时,发现F_B函数没有声明过,报错!
此时陷入了一个死循环,先放F_B函数,也会因为F_A函数未声明而报错,幸好PLSQL已经考虑到了这种偶发情况,解决的方法是“前置声明”。
即在F_A前面再加一条F_B的声明,但不包含具体的定义。这下编译就通过了。
相关文章推荐
- C++中头文件相互包含与前置声明
- C++类前置声明解决类之间互相包含的问题
- C++中头文件相互包含与前置声明
- C++中头文件的相互包含及前置声明
- 头文件相互包含与前置声明
- 关于前置声明与C++中头文件相互包含的几点问题
- C++中头文件相互包含与前置声明
- C++中头文件相互包含与前置声明
- c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)
- 关于前置声明与C++中头文件相互包含的几点问题
- 关于前置声明与C++中头文件相互包含的几点问题
- 头文件相互包含引起的错误(对类前置声明和包含头文件的理解 )
- 栈和递归---解决迷宫问题
- 关于递归效率低的解决方法___SQL递归
- 递归打印某个对象所在继承体系中的所有类及声明的属性
- /usr/include/linux/netfilter.h: 错误:‘in’的类型不完全,netfilter_ipv4.h:53: ‘INT_MIN’‘INT_MAX’未声明解决方法
- ORA-01033: ORACLE 正在初始化或关闭解决方法,ORA-00313 &ORA-00312 错误 解决方案
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- 1.7前置声明与定义