日期:2014-05-17  浏览次数:20860 次

为什么捕获不到异常?
我用vc连oracle(ODBC),代码如下:
CDatabase   db;
db.OpenEx(...);
try
{
db.ExecuteSQL(_T( "call   proc_xxx( 'aa ') "));
}
catch(CDBexception*   e)
{...}
db.close

其中proc_xxx是一个存储过程,操作是删除ID为“aa”的记录。但是实际数据库中
并没有ID为“aa”的记录,所以肯定是应该抱错的。用SQL   PLUS   执行这个SQL语句就抱错,可是到了MFC   程序里就捕获不到这个异常了,为什么?


------解决方案--------------------
不可能有异常的,因为确实是删除数据了,只不过是删除了0行而以
------解决方案--------------------
楼上正解,是你的过程的问题,如果想出异常,按我这样改下过程
create or replace procedure pro_testpro
is
begin
...
delete table_name where ... ;
if sql%rowcount = 0 then
raise no_data_found;
end if;
...
end pro_testpro;

删除行数为0时会触发ora-01403
------解决方案--------------------
删数据不会有异常的。
如果非要那么做,楼主可以在存储过程里面加个判断,如果删除0行,就胡乱做个肯定报错的操作,嘿嘿,有点狠了