手动去跑一个oracle存储过程一分钟左右跑完,而用moia调度去跑,则要两个多小时,不知道原因在哪
经过后来的研究,我终于发现了这一问题的原因:原因就是手动跑和用moia调度跑所用的优化器模式不相同,同样的SQL,用调度调起来会严格按照预估的执行计划执行(也就是F5键弹出来的执行计划),这个预估的执行计划就是调度真实的执行计划,而手动通过PL/SQL developer这个软件去执行,则不会真正的按照F5键弹出来的执行计划去执行,而是会自己去判断选择执行最快的方式,所以同样的SQL会有不一样的执行计划,从而导致时间差异巨大
从参数的返回情况来看:
如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;
从调用情况来看:
如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,你可以参考《ORACLE 9I PL\SQL程序设计》(机械工业出版社);
如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。