加载中…
  
博文
(2009-02-27 21:47)
标签:

杂谈

分类: MSN搬家
     Cause:cannot perform a DDL, commit or rollback inside a query or DML

     晚上临近下班的时候,刚开始写存储过程、函数、包体的同事拉住问,问了个ora-14552的错误。同事在包中定义了一个函数,一个存储过程,通过存储过程调用函数;而函数里包含有grant语句。在单步跟踪存储过程调用函数的时候,每次在执行grant语句时,报了该ora-14552的错误,错误的原因为cannot perform a DDL, commit or rollback inside a query or DML;同事发现如果把函数改成存储过程,然后再通过存储过程调用存储过程,并不会有这样的错误。于是怀疑函数这破东西不行。当时本人据理力争,以函数和存储过程的机制上看,其实现原理完全一致,只是函数要有返回值,而存储过程无需,实现机理上并无差异,因此不可能发生上述的存储过程调存储过程可以,而把被调用的对象改成函数后就有问题。然后一直尝试,先是把该函数从包体独立出来,新生成个函数,然后通过select function(v_input) from dual的方式进行调用,结果是非常正常的。
     试着继
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有