下面是一些实际的代码我试图调试:如果设置为空,FETCH INTO不会引发异常,是吗?
BEGIN
OPEN bservice (coservice.prod_id);
FETCH bservice
INTO v_billing_alias_id, v_billing_service_uom_id, v_summary_remarks;
CLOSE bservice;
v_service_found := 1;
-- An empty fetch is expected for some services.
EXCEPTION
WHEN OTHERS THEN
v_service_found := 0;
END;
当参数化光标bservice(PROD_ID)是空的,它取空到三个变量,并且不抛出异常。
因此,编写此代码期望它抛出异常的人是错误的,对吧?评论似乎意味着和预计空取回,然后它为稍后处理设置一个标志,但我认为这个代码不可能已经用空集测试过。
显然,它应该使用bservice%NOTFOUND或bservice%FOUND或类似的。
Nyffenegger对,它基本上就像SQL Server一样工作。我认为FETCH不覆盖变量就是为什么没有检测到这个错误。不知道为什么光标首先被使用,因为你可以选择变量,或者直接进入更新... – 2011-02-03 15:12:16